Strings
.で水平に表示していた単純な配列がListView
ありArrayAdapter
ます。私がやろうとしているのは、ユーザーがからアイテムを選択したときに、ListView
そのアイテムをクリックできないようにし、そのアイテムの背景色を変更することです。おそらく、「グレーアウト」した外観のようです。カスタムを作成してメソッドAdapter
をオーバーライドすることを検討していましたisEnabled(int position)
が、どうすればよいかわかりません。アドバイス、提案、またはヘルプをいただければ幸いです。
4680 次
4 に答える
9
カスタム アダプターを作成して
isEnabled(int position)
メソッドをオーバーライドすることを検討していましたが、どうすればよいかわかりません。
これは非常に簡単です。SparseBooleanArray を使用して有効な項目を効率的に追跡することをお勧めします。
public class MyAdapter extends ArrayAdapter<String> {
private SparseBooleanArray enabledItems = new SparseBooleanArray();
public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
super(context, textViewResourceId, objects);
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return enabledItems.get(position, true);
}
public void toggleItem(int position) {
boolean state = enabledItems.get(position, true);
enabledItems.put(position, !state);
}
}
Eclipse の AutoComplete 機能は必要な作業を行いましたが、ここにいくつかの簡単なメモを示します。
areAllItemsEnabled()
とともにオーバーライドする必要がありますisEnabled()
- 電話するだけ
toggle()
で使えるように設計されていますonItemClickListener()
adapter.toggle(position)
行の外観を変更したい場合 (デフォルトでの有効化と無効化よりも多くの変更) は、単純にオーバーライドします
getView()
。両方のケースをカバーすることを忘れないでください:public View getView(int position, View convertView, ViewGroup parent) { convertView = super.getView(position, convertView, parent); if(!isEnabled(position)) { /* change to disabled appearance */ } else { /* restore default appearance */ } return convertView; }
それが役立つことを願っています!
于 2013-04-08T18:22:36.220 に答える
0
使用setEnabled(bool)
プロパティ:
yourlistview.setEnabled(false);
于 2013-04-08T18:13:54.657 に答える