1

ExpandableListViewがあり、カスタマイズされたBaseExpandableAdapterを設定しています。私の質問は、アダプター自体のコンストラクターに表示したいレイアウト(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を取得するこのジョブは、(上記のように)アダプターのコンストラクターにあるべきか、それとも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 に答える