好的,所以这个网站上已经解决了很多问题,但是我不相信我的代码使用的确切问题。我正在使用完全有效的 CheckedTextViews 填充 listView。但是,当我单击一个项目时,它会被检查,但是当我上下滚动时,也会检查随机行。我意识到它必须与 ListView 如何跟踪项目有关。我目前遇到了一些错误。我试图用行列表填充哈希图,这样我就可以跟踪哪个设置为真,哪个设置为假。但是,我不确定在哪里实施地图并尝试填充它。
这是我的 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 中以填充它,但是它抱怨空指针。
这是我尝试使用 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(),但是我不知道这是否适用于我的情况。任何帮助将不胜感激!