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);