我有一个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);

最佳答案

我发现,如果我需要为适配器中的每个项目一次又一次地放大布局,则应该在任何适配器的getChildView()或getView()中完成膨胀。
但是在上面的代码中,我在构造函数中对其进行了一次充气,然后将图像手动添加到了GridLayout中,因此无需在getChildView()中一次又一次地对其进行充气。
因此,它可以正常工作,因为它在适配器的构造函数中被充气一次。

10-08 15:19