Androidのリストビューの効率を最大限にするためには、画面に表示するのに必要なだけの膨らんだ「行」ビューが必要です。ビューが画面外に移動したら、convertView
がnullかどうかを確認して、getView
メソッドでビューを再利用する必要があります。2つの異なるレイアウトでAndroid Listviewのビューを再利用
ただし、リストに2つの異なるレイアウトが必要な場合は、どのようにこのアイデアを実装できますか?注文の一覧と1つのレイアウトは完了した注文用で、もう1つのレイアウトは処理中の注文用です。
これは私のコードが使用しているアイデアのチュートリアルです。私の場合、私は2列のレイアウトを持っているでしょう:R.layout.listview_item_product_complete
とR.layout.listview_item_product_inprocess
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
if(getItemViewType(position) == COMPLETE_TYPE_INDEX) {
convertView = mInflator.inflate(R.layout.listview_item_product_complete, null);
holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_complete);
holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_complete);
}
else { // must be INPROCESS_TYPE_INDEX
convertView = mInflator.inflate(R.layout.listview_item_product_inprocess, null);
holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_inprocess);
holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_inprocess);
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
thisOrder = (Order) myOrders.getOrderList().get(position);
// If using different views for each type, use an if statement to test for type, like above
holder.mNameTextView.setText(thisOrder.getNameValue());
holder.mImgImageView.setImageResource(thisOrder.getIconValue());
return convertView;
}
public static class ViewHolder {
public TextView mNameTextView;
public ImageView mImgImageView;
}
最近この問題が発生しました。私は2つの異なるレイアウトを使用してリストビューを作成しており、完全な無秩序をもたらしました。私は何度も何度も私のコードを見直しましたが、間違ったレイアウトが再利用された理由を理解できませんでした。最終的には、リストごとに1つの*レイアウトだけを固執することにしましたが、アイテムタイプに基づいてそのビューを大きく変更しました。コード内のアイテムを編集するためにできることはたくさんあります。 –