我有一个ExpandableListView,我正在为它设置一个自定义的BaseExpandableAdapter。我的问题是,我可以膨胀我希望在Adapter本身的构造函数中显示的Layout(XML),而不是每次都在getChildView()中对它进行膨胀吗?我将动态更改要在getChildView()中选择的每个可展开列表显示的图像。代码就在这里。
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private LayoutInflater mInflater;
GridLayout gl = null;
HorizontalScrollView hScrl;
public MyExpandableListAdapter (ArrayList<SensorType> parentGroup, Context context) {
mContext = context;
mInflater = LayoutInflater.from(mContext);
View view = infalInflater.inflate(R.layout.expandlist_items, null);
gl = (GridLayout) view.findViewById(R.id.gl);
hScrl = (HorizontalScrollView) view.findViewById(R.id.hScroll);
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (childPosition == 0) {
gl1.removeAllViews();
}
int mMax = 8; // show 8 images
for (int i =0; i < mMax; i++) {
ImageView myImg = new ImageView(mContext);
myImg.setBackgroundRes(R.drawable.image1);
gl.addView(myImg);
}
return hScrl;
}
上面是否有任何问题,如果有更多图像,它会正确显示图像并滚动。但我的问题是,这个膨胀布局和获取gl和hscrl的工作,应该是在Adapter的构造函数中(如上所示)还是应该在getChildView中?
这4个LOC:
mInflater = LayoutInflater.from(mContext);
View view = infalInflater.inflate(R.layout.expandlist_items, null);
gl = (GridLayout) view.findViewById(R.id.gl);
hScrl = (HorizontalScrollView) view.findViewById(R.id.hScroll);
答案 0 :(得分:1)
我发现如果我需要为适配器中的每个项目反复充气布局,那么膨胀应该在任何适配器的getChildView()或getView()中完成。 但是在上面的代码中,我在构造函数中对它进行一次膨胀,并将图像手动添加到GridLayout中,因此我不需要在getChildView()中一次又一次地对它进行充气。 因此它工作正常,因为它在适配器的构造函数中膨胀一次。