2012-04-26 23 views
1

特定のグループをクリックすると、私のgrouptextが自動的に変更されるという問題があります。私はこの問題の原因を見つけることができませんでした。同じような解決策を提案してください。オープン後GroupText特定のグループを開くときに、アンドロイドの展開可能なリストビューで変更されました

enter image description here

enter image description here

コード(拡張アダプタ):事前に

public class ExpResearchListAdapter extends BaseExpandableListAdapter { 
    // Sample data set. children[i] contains the children (String[]) for 
    // groups[i]. 
    Context context; 
    private String[] groups = { "Research by Brand", "Research by Category", 
     "Research by Price" , "Research by Fuel Economy", "Recently Viewed"}; 
    GridView label; 
    TextView groupText; 
    String group; 
    ImageView groupImg; 
    //ArrayList<String> groups = new ArrayList<String>(); 
    ArrayList<Integer> groupImage = new ArrayList<Integer>(); 
    ArrayList<Integer> childElement = new ArrayList<Integer>(); 
    private Integer[][] children = { 
      { R.drawable.icon_1, R.drawable.icon_2, R.drawable.icon_3, R.drawable.icon_4, R.drawable.icon_5, R.drawable.icon_6, R.drawable.icon_7, R.drawable.icon_8, R.drawable.icon_9, 
       R.drawable.icon_10, R.drawable.icon_11, R.drawable.icon_12, R.drawable.icon_13, R.drawable.icon_14, R.drawable.icon_15, R.drawable.icon_16, R.drawable.icon_17, R.drawable.icon_18, 
       R.drawable.icon_19, R.drawable.icon_20, R.drawable.icon_21, R.drawable.icon_22, R.drawable.icon_23, R.drawable.icon_24, R.drawable.icon_25, R.drawable.icon_26, R.drawable.icon_27, 
       R.drawable.icon_28, R.drawable.icon_29, R.drawable.icon_30, R.drawable.icon_31, R.drawable.icon_32, R.drawable.icon_33, R.drawable.icon_34, R.drawable.icon_35, R.drawable.icon_36, 
       R.drawable.icon_37, R.drawable.icon_38, R.drawable.icon_39, R.drawable.icon_40, R.drawable.icon_41, R.drawable.icon_42, R.drawable.icon_43, R.drawable.icon_44, R.drawable.icon_45, 
       R.drawable.icon_46} 
      }; 
    LinearLayout linear; 

    public ExpResearchListAdapter(Context context, ArrayList<String> groups, ArrayList<Integer> groupImage, ArrayList<Integer> childElement, LinearLayout linear) 
    { 
     this.context=context; 
     //this.groups = groups; 
     this.groupImage = groupImage; 
     this.childElement = childElement; 
     this.linear = linear; 
    } 

    public Object getChild(int groupPosition, int childPosition) { 
     return children[groupPosition][childPosition]; 
    } 

    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    public int getChildrenCount(int groupPosition) { 
     int i = 0; 
     try { 
     i = children[groupPosition].length; 

     } catch (Exception e) { 
     } 

     return 1; 
    } 



    public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 
     if(convertView==null) 
     { 
      LayoutInflater inflater = LayoutInflater.from(context); 
      convertView = (View) inflater.inflate(R.layout.brand_research_grid, null); 
      label = (GridView) convertView.findViewById(R.id.gv_ResearchList_Child); 
      label.setAdapter(new GridAdapter(context, childElement)); 
      label.setCacheColorHint(Color.WHITE); 

      // initialize the following variables (i've done it based on your layout 
      // note: rowHeightDp is based on my grid_cell.xml, that is the height i've 
      // assigned to the items in the grid. 
      //final int spacingDp = 20; 
      final int colWidthDp = 50; 
      final int rowHeightDp = (childElement.size()/3)*10; 
      //final int rowHeightDp = 107; 

      // convert the dp values to pixels 
      //final float COL_WIDTH = context.getResources().getDisplayMetrics().density * colWidthDp; 
      final float COL_WIDTH = 10; 
      //final float ROW_HEIGHT = context.getResources().getDisplayMetrics().density * rowHeightDp; 
      final float ROW_HEIGHT = 107f; 
      final float SPACING = context.getResources().getDisplayMetrics().density * 0; 
      System.out.println("===================================RowHeight"+ROW_HEIGHT); 
      System.out.println("===================================RowHeightDP"+rowHeightDp); 


      // calculate the column and row counts based on your display 
      final int colCount = (int)Math.floor((linear.getWidth() - (2 * SPACING))/(COL_WIDTH + SPACING)); 
      final int rowCount = (int)Math.ceil((childElement.size() + 0d)/3); 
      //final int rowCount = 16; 

      // calculate the height for the current grid 
      final int GRID_HEIGHT = Math.round(rowCount * (ROW_HEIGHT + SPACING)); 
      System.out.println("===================================GHieght"+GRID_HEIGHT); 
      System.out.println("===================================colCount"+colCount); 
      System.out.println("===================================rowCount"+rowCount); 
      // set the height of the current grid 
      label.getLayoutParams().height = GRID_HEIGHT; 
     } 





     return convertView; 
    } 

    public Object getGroup(int groupPosition) { 
     //return groups.get(groupPosition); 
     return groups[groupPosition]; 
    } 

    public int getGroupCount() { 
     return groups.length; 
    } 

    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(
        R.layout.research_list_exp_group, null); 
      groupText = (TextView) convertView 
        .findViewById(R.id.tv_ResearchList_ExpParentElement); 
      groupImg = (ImageView) convertView 
        .findViewById(R.id.img_ResearchList_GroupParentImage); 
      group = (String) getGroup(groupPosition); 
      // convertView.setClickable(false); 
      groupText.setText(groups[groupPosition]); 
      groupImg.setImageResource(groupImage.get(groupPosition)); 
     } 


     return convertView; 
    } 

    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 

    public boolean hasStableIds() { 
     return true; 
    } 

    } 

感謝。

+0

gridadapterクラスのコーディングを追加できますか? – Sharath

答えて

2

getGroupView()関数で問題が発生しました、あなたは間違ってconvertViewを使用しています。 convertViewがnullの場合、レイアウトを正しく膨張させてビューを塗りつぶしています。 しかし、ヌルでない場合は、ビューを変更していません!ビューはリサイクルされたビューです。これは以前のグループアイテムビューの1つですが、どちらがわかるのかわかりません!あなたもそれを記入する必要があります。 グループアイテムをクリックすると、コンテンツが再描画され、すべてのビューがリサイクルされる可能性があります。

getChildView()の機能に同じ問題があります。

thisチュートリアル、特に例9.5を確認してください。リサイクルビューを正しく使用する方法(およびホルダーパターンの使用方法)も示しています。

コードにもう1つ問題があります。GridViewListViewExpandableListView)内に使用しようとしています。それをしないでください!もう一方の内部をスクロールできる2つのウィジェットを使用しないでください。各スクロール・ビューがスクロールのために異なる軸を使用しない限り、そのようなことをしないでください。

+0

例3.4がありません – Talha

関連する問題