さて、これはこのサイトでいくらか対処されていますが、私のコードが使用しているものに正確な問題があるとは思いません。完全に機能するCheckedTextViewsでlistViewを埋めています。ただし、アイテムをクリックするとチェックされますが、上下にスクロールするとランダムな行もチェックされます。ListViewがアイテムを追跡する方法と関係があるに違いないことを私は理解しています。現在、いくつかのエラーが発生しています。行のリストでハッシュマップを埋めようとしたので、どれがtrueに設定され、どれがfalseに設定されているかを追跡できます。しかし、私はどこに地図を実装してそれを埋めようとするかについては前向きではありません。
これが私のOnCreateです
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewmenu);
//Get table name of menu clicked.
Bundle extras = getIntent().getExtras();
tableName = extras.getString("table");
// map each contact's name to a TextView in the ListView layout
String[] from = new String[] { "name" };
int[] to = new int[] { R.id.toppingCheckedTextView };
for(int i=0; i< from.length; i++){
map.put(i, false);
}
contactAdapter = new SimpleCursorAdapter(
ViewToppingListing.this, R.layout.toppings_list_item, null, from, to);
setListAdapter(contactAdapter); // set contactView's adapter
}
マップをonCreateに配置して塗りつぶそうとしましたが、nullpointerについて文句を言います。
これがOnListItemClickメソッドを使ってみたところです
@Override
protected void onListItemClick(ListView arg0, View arg1, int arg2, long arg3){
final int index = arg2 - arg0.getFirstVisiblePosition();
View v = arg0.getChildAt(index);
CheckedTextView ctv = (CheckedTextView) v.findViewById(R.id.toppingCheckedTextView);
if((Boolean)map.get(index) == true){
ctv.setChecked(true);
ctv.setVisibility(View.VISIBLE);
} else{
ctv.setVisibility(View.GONE);
}
}
私はこれについてたくさん読んだことがあり、多くの解決策にはgetView()の使用が含まれているようですが、それが私の状況に当てはまるかどうかはわかりません。どんな助けでも大歓迎です!