1

我有一个 ExpandableListView 并正在为其设置一个自定义的 BaseExpandableAdapter。我的问题是,我可以膨胀我想在适配器本身的构造函数中显示的 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);
4

1 回答 1

1

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

于 2012-10-27T14:17:38.493 回答