我有一个问题,我想在可扩展listView中向一个组添加不同的元素,就像在图片中一样。有可能吗?我知道,我必须在适配器中设置我的getChildView方法吗?
case 2:
if (childPosition==0){
infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.group_item, null);
txtListChild=(TextView)convertView
.findViewById(R.id.tv_group_name) ;
txtListChild.setText("Вот они, родненькие условия использования)");
}
else{
c = db.getAccamulativeListOfCompany(companyID);
infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.item_accumulative_list, null);
txtListChild = (TextView) convertView
.findViewById(R.id.lblListItem);
Log.d("myLogs", "group_pos=" + groupPosition + "," + childPosition);
TextView tvDiscount = (TextView) convertView.findViewById(R.id.tv_accumulative_discount);
ImageView ivAccamulative = (ImageView) convertView.findViewById(R.id.iv_accamulative_item);
if (c != null) {
if (c.moveToFirst()) {
c.moveToPosition(childPosition-1);
txtListChild.setText(c.getString(1) + " руб.");
tvDiscount.setText(c.getString(2) + "%");
File imgFile = new File(c.getString(4));
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ivAccamulative.setImageBitmap(myBitmap);
}
}
}
}
break;
答案 0 :(得分:4)
是的,我认为这些是你想要不同类型的儿童观点。
在这种情况下,覆盖下面的函数,返回您希望在getChildTypeCount中生成的不同子布局的数量,以及使用组和子位置分配对应于每个布局的唯一整数(1到count)的逻辑作为参数,在getChildType中。
在getChildView方法中,根据getChildType方法的逻辑,您将膨胀不同的布局。在这里调用它可能是一个好主意,并使用开关返回值来确定要膨胀的布局。
如果执行此操作,您不必在每次回收时都覆盖视图的布局,ExpandedListView将确保在回收视图时,您将只获得与逻辑匹配的视图类型在你的getChildType方法中。
简单的替代方法是简单地在getView / getChildView方法中扩展您需要的任何视图,但当然这并不是非常有效。
public class MyAwesomeAdapter extends BaseExpandableListAdapter {
@Override
public int getChildType(int groupPosition, int childPosition) {
// Return a number here, 1 to whatever you return in getChildTypeCount.
// Each number should correspond to a particular layout, using group
// and child position to determine which layout to produce.
return super.getChildType(groupPosition, childPosition);
}
@Override
public int getChildTypeCount() {
// Return the number of distinct layouts you expect to create
return super.getChildTypeCount();
}
@Override
public View getChildView(int gp, int cp, boolean arg2, View view, ViewGroup arg4) {
if(view == null){
switch(getChildType(gp, cp)){
case 1:
//inflate type 1
break;
case 2:
//inflate type 2
break;
....
}
}
} }