2012-04-26 43 views
3

我有一個問題,我在一個父項中實現了帶有網格視圖的ExpandableListView作爲子項。 GridView中有46個圖像。因此,當我們打開第一個父項時,它會顯示一個網格視圖,其中46個圖像帶有46個圖像的插槽。意味着顯示46個圖像的一個插槽,然後又顯示另一個46個圖像,然後是另一個然後是另一個。意味着多次在同一個佈局中重複相同的佈局。我無法找到問題的根源,因此我未能解決該問題。請給我建議任何解決方案。子佈局在ExpandableListView中重複多次

代碼(擴展列表):

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; 
    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 i; 
    } 

    public TextView getGenericView() { 
     // Layout parameters for the ExpandableListView 
     AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
      ViewGroup.LayoutParams.FILL_PARENT, 64); 

     TextView textView = new TextView(context); 
     textView.setLayoutParams(lp); 
     // Center the text vertically 
     textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
     //textView.setTextColor(R.color.marcyred); 
     // Set the text starting position 
     textView.setPadding(36, 0, 0, 0); 
     return textView; 
    } 

    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, children)); 
      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 = 10; 
      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 ROW_HEIGHT = context.getResources().getDisplayMetrics().density * rowHeightDp; 
      final float SPACING = context.getResources().getDisplayMetrics().density * spacingDp; 
      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); 
    } 

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

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

    public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) { 
     String group = (String) getGroup(groupPosition); 
     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); 
      // convertView.setClickable(false); 
     } 
     groupText.setText(group); 
     groupImg.setImageResource(groupImage.get(groupPosition)); 

     return convertView; 
    } 

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

    public boolean hasStableIds() { 
     return true; 
    } 

    } 

GridAdapter:

public class GridAdapter extends BaseAdapter{ 

    public Context context; 
    private LayoutInflater mInflater; 
    //public ArrayList<Integer> childElements = new ArrayList<Integer>(); 
    Integer[][] childElements; 
    ImageView imgGridItem; 

    public GridAdapter(Context context, Integer[][] childElements) 
    { 
     this.context = context; 
     this.childElements = childElements; 
     mInflater = LayoutInflater.from(context); 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return childElements.length; 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return arg0; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return arg0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     //pos=position; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.grid_item, null); 
      holder = new ViewHolder(); 

      imgGridItem = (ImageView)convertView.findViewById(R.id.img_GridItem); 
     } 
     imgGridItem.setImageResource(childElements[position][0]); 

     return convertView; 
    } 
    class ViewHolder { 
     private ImageView imgGridItem; 

    } 


} 

在此先感謝。

+0

和誼自己也是具有expandablelistview類似的問題..做ü找到此 – Shruti 2012-11-05 05:57:22

+0

的解決方案也u得到解決此 – Meenal 2014-12-02 12:54:12

回答

-1

您需要做的僅僅是將一個孩子傳遞給可擴展列表。所以,只有一個gridview會顯示在可擴展列表中,但是您想要在網格視圖中顯示所有選項。

因此,如果您有另一個組,並且有另一個gridview項目,只需使用gridview將一個項目添加到可擴展列表的該組中,但在此gridview中,請確保您傳遞的是您想要的數據。我的意思是,你應該使用相同的gridview適配器,但使用不同的數據。我希望這對你有所幫助。

1

找了幾個小時沒有解決方案。這是答案。簡單地做出這樣的父適配器的功能getChildrenCount:

@Override 
public ing getChildrenCount(int groupPosition){ 
    return 1; 
} 
相關問題