getViewメソッドでカスタムArrayAdapter setBackground
-
25-09-2019 - |
質問
私は数字(重み)の束が表示されますListActivityに取り組んでいます。私は、ListViewコントロール内の特定の行の背景を変更したいと思います。これを行うには、私はArrayAdapterクラスのカスタム実装を作成し、GetViewメソッドをオーバーライドしています。アダプタは、番号のリストを受け取り、(簡単の理由のために)黄色の数20と行の背景を設定します。
public class WeightListAdapter extends ArrayAdapter<Integer> {
private List<Integer> mWeights;
public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
mWeights = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
int itemWeight = mWeights.get(position);
if (itemWeight == 20) {
v.setBackgroundColor(Color.YELLOW);
}
return v;
}
}
問題は、だけでなく、数20の行は番号0(最初のロー)と黄色の背景だけでなく、行を取得しているし、なぜそうなのか、私にはわからない。
アム私は(スーパーメソッドを呼び出すような)GetViewメソッドで何かが間違っていますか?実装のための私の推論は次のとおりです。すべての返されたビューが同じである必要がありますのみビューフィッティング(私はスーパーメソッドを呼んでいる理由のこと)の基準を変更する必要がある場合は、
あなたの助けをありがとう!
解決
私は、これが適切に行われるべきかを調べるために研究のビットをしました。
私は、これはそれを行うにはどのように適切な方法だと思いとして私は、同じ問題で他の人のために、このダウンを書いています。 、私は間違っていますか。このソリューションは、任意の欠陥を持っている場合、私は見ていないよなら、私は、教えてくださいます。
public class WeightListAdapter extends ArrayAdapter<Integer> {
private static final int TYPE_COUNT = 2;
private static final int TYPE_ITEM_COLORED = 1;
private static final int TYPE_ITEM_NORMAL = 0;
public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
int item = getItem(position);
return (item == 30) ? TYPE_ITEM_COLORED : TYPE_ITEM_NORMAL;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
switch (getItemViewType(position)) {
case TYPE_ITEM_COLORED:
v.setBackgroundColor(Color.YELLOW);
break;
case TYPE_ITEM_NORMAL:
break;
}
return v;
}
}
は明らかに基本クラスがすでに正しいconvertView
を確保するロジック(getView
とgetViewItemType
方法に基づく)getViewTypeCount
メソッドに渡される実装します。
他のヒント
Androidのビューは、再使用各行の成分です。私もこの問題を得ています。
は、それが再利用のためになら、なぜあなたはitemWeightが20と等しくない場合のために別のチェックを追加しませんか?等しくない場合には、通常のバックグラウンドバックを設定します。