2013-06-27 29 views
0

我是Android的新手。我想了解使用自定义适配器的Expandable ListView实现。有人请向我解释这段代码,以便我能够操纵它。我有一些问题想起,为什么变量'groupStatus'被视为一个数组变量,不能我们把textview放在可扩展列表的子节点等。在此先感谢。Android:理解Expandable List里面出来

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

private Context mContext; 
private ExpandableListView mExpandableListView; 
private List<GroupEntity> mGroupCollection; 
private int[] groupStatus; 

public ExpandableListAdapter(Context pContext, ExpandableListView pExpandableListView, List<GroupEntity> pGroupCollection) { 
mContext = pContext; 
mGroupCollection = pGroupCollection; 
mExpandableListView = pExpandableListView; 
groupStatus = new int[mGroupCollection.size()]; 

setListEvent(); 
} 

private void setListEvent() { 

mExpandableListView.setOnGroupExpandListener(new OnGroupExpandListener() { 

@Override 
public void onGroupExpand(int arg0) { 
// TODO Auto-generated method stub 
groupStatus[arg0] = 1; 
} 
}); 

mExpandableListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { 

@Override 
public void onGroupCollapse(int arg0) { 
// TODO Auto-generated method stub 
groupStatus[arg0] = 0; 
} 
}); 
} 

@Override 
public String getChild(int arg0, int arg1) { 
// TODO Auto-generated method stub 
return mGroupCollection.get(arg0).GroupItemCollection.get(arg1).Name; 
} 

@Override 
public long getChildId(int arg0, int arg1) { 
// TODO Auto-generated method stub 
return 0; 
} 

@Override 
public View getChildView(int arg0, int arg1, boolean arg2, View arg3, 
ViewGroup arg4) { 
// TODO Auto-generated method stub 

ChildHolder childHolder; 
if (arg3 == null) { 
arg3 = LayoutInflater.from(mContext).inflate(
R.layout.list_group_item, null); 

childHolder = new ChildHolder(); 

childHolder.title = (TextView) arg3.findViewById(R.id.item_title); 
arg3.setTag(childHolder); 
}else { 
childHolder = (ChildHolder) arg3.getTag(); 
} 

    childHolder.title.setText(mGroupCollection.get(arg0).GroupItemCollection.get(arg1).Name); 

return arg3; 
} 

@Override 
public int getChildrenCount(int arg0) { 
// TODO Auto-generated method stub 
return mGroupCollection.get(arg0).GroupItemCollection.size(); 
} 

@Override 
public Object getGroup(int arg0) { 
// TODO Auto-generated method stub 
return mGroupCollection.get(arg0); 
} 

@Override 
public int getGroupCount() { 
    // TODO Auto-generated method stub 
return mGroupCollection.size(); 
} 

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

@Override 
public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) { 
// TODO Auto-generated method stub 
GroupHolder groupHolder; 
if (arg2 == null) { 
arg2 = LayoutInflater.from(mContext).inflate(R.layout.list_group, 
null); 
groupHolder = new GroupHolder(); 
groupHolder.img = (ImageView) arg2.findViewById(R.id.tag_img); 
groupHolder.title = (TextView) arg2.findViewById(R.id.group_title); 
arg2.setTag(groupHolder); 
} else { 
groupHolder = (GroupHolder) arg2.getTag(); 
} 
if (groupStatus[arg0] == 0) { 
groupHolder.img.setImageResource(R.drawable.group_down); 
} else { 
groupHolder.img.setImageResource(R.drawable.group_up); 
} 
groupHolder.title.setText(mGroupCollection.get(arg0).Name); 

return arg2; 
} 

class GroupHolder { 
ImageView img; 
TextView title; 
} 

class ChildHolder { 
TextView title; 
} 

@Override 
public boolean hasStableIds() { 
// TODO Auto-generated method stub 
return true; 
} 

@Override 
public boolean isChildSelectable(int arg0, int arg1) { 
// TODO Auto-generated method stub 
return true; 
} 

} 
+0

我曾经使用过此教程走了,但还不够清楚.. http://shenhengbin.wordpress.com/2012/03/25/android -practice-custom-expandablelistview-sample-2/ – Divyang

+0

我想举个例子你的概念,但你可以让我知道你的要求是什么?你的要求是否与上面的代码相同? – KOTIOS

+0

我想做一个可扩展的类别列表。单击类别用户将看到解释该类别的文本视图,并包含用于打开其他活动的按钮。每个类别选项将包含相同的布局,即文本视图和按钮。我想了解这个代码是如何工作的...并且非常感谢你们的合作Android28 .. – Divyang

回答

2

ExpandableListView Android中

这个Android的可扩展列表视图需要三个布局文件;一个用于 显示包含ExpandableListView的主布局,一个用于 组项目布局以及其他子项目布局。

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <ExpandableListView 
     android:id="@+id/my_list" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" > 
    </ExpandableListView> 

</RelativeLayout> 

group_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="10dp" > 

    <TextView 
     android:id="@+id/group" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="25dp"/> 
</LinearLayout> 

child_item.xml

根据乌拉圭回合的要求ü需要一个按钮, TextView的儿童视图

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" > 

    <TextView 
     android:id="@+id/child_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:paddingLeft="25dp" 
     android:text="child_item" /> 

    <Button 
     android:id="@+id/button1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="51dp" 
     android:layout_toRightOf="@+id/laptop" 
     android:text="Button" /> 

</RelativeLayout> 

每个子项都包含一个TextView的显示文字和一个按钮 删除项目。

现在,让我们做一个类ExpandableListAdapter.java

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    // Variable Declartion 
    private Activity context; 

    // 1st parameter is the name of Item 
    // 2nd parameter is the child's of that of particular Item 
    private Map<String, List<String>> itemCollections; 

    // here parameter is the name of Item 
    private List<String> item; 

    // here is the constructor 
    // here we just inilize the class variable with the variable you passed to 
    // this adapter 
    public ExpandableListAdapter(Activity context, List<String> item_names, 
      Map<String, List<String>> Collections) { 
     this.context = context; 
     this.itemCollections = Collections; 
     this.item = item_names; 
    } 

    // if we want to get any child Object from its position this method will 
    // provide the same . for example if i click 1st item in group1 and 1st item 
    // in its childlist then in this case method will be like getChild(1, 1); 
    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     // 1. we get the Actuall group clicked -> item.get(groupPosition) 
     // 2. we get the child of its -> 
     // item.get(groupPosition).get(childPosition) 
     // 3. we return it as object from its collection -> 
     // itemCollections.get(item.get(groupPosition)).get(childPosition); 
     return itemCollections.get(item.get(groupPosition)).get(childPosition); 
    } 

    // when the child item is clicked this method will be called and it's will 
    // return its id 
    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    // here is where we put all data u passed to adapter to its view 
    @Override 
    public View getChildView(final int groupPosition, final int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = context.getLayoutInflater(); 

     // get the layout of child and convertView will hold its instance 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.child_item, null); 
     } 

     // referance of textview in child layout 
     TextView item1 = (TextView) convertView.findViewById(R.id.child_text); 
     // referance of button in child layout 
     Button delete = (Button) convertView.findViewById(R.id.button1); 
     // on click of the button do whatever u want 
     delete.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // do whatever u want 
      } 
     }); 

     return convertView; 
    } 

    // here its provide the total child to be placed into particular group 
    @Override 
    public int getChildrenCount(int groupPosition) { 
     return itemCollections.get(item.get(groupPosition)).size(); 
    } 

    // here we provide the group object itself from its position 
    @Override 
    public Object getGroup(int groupPosition) { 
     return item.get(groupPosition); 
    } 

    // the size of group items 
    @Override 
    public int getGroupCount() { 
     return item.size(); 
    } 

    // provide id of group on which it is clicked 
    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     String itemName = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.group_item, null); 
     } 
     TextView item = (TextView) convertView.findViewById(R.id.group); 
     // here u can set data to item variable that is text view of group 
     // layout 
     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

} 
+0

我希望我在代码中的意见能够帮助你理解我的意思我已经找到了更多教程为你http://theopentutorials.com/tutorials/android/listview/android-expandable-list-view-example/ ..我认为这将帮助你更好..如果有任何问题,请告诉我,让我知道 – KOTIOS

+0

谢谢你这么多的帮助...一个100喜欢那 – Divyang

+0

任何更多的问题 – KOTIOS