好吧,所以我正在创建一个简单的待办事项列表应用程序,它从一个字符串数组中读取项目,并将它们作为simple_list_item_checked显示在列表视图中。一切都很好,我已经设置了onClickListener,所以它会检查我正在点击什么,但是,当我点击一个项目时,它还检查项目8项,重复。 (即,我点击顶部项目,它会得到一个检查,项目8项下来检查,然后8检查后等,等等)这是主要活动的代码:
package com.disneyland;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class Launch extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] Rides = getResources().getStringArray(R.array.rides);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, Rides));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
CheckedTextView check = (CheckedTextView)view;
check.setChecked(!check.isChecked());
}
});
}
}
显然,我的问题是为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
我也遇到了这个问题,并进行了快速修复。 我按照icecreamman的链接发现我的ListView XML缺少这一行:
android:choiceMode="multipleChoice"
这允许选择多个项目。如果我选择了singleChoice,则可以随时检查列表中的一个项目,例如单选按钮。这条线修复了我的问题。
答案 1 :(得分:0)
我不能肯定地说,但我有猜测。你在适配器的getView方法中使用convertView做了什么吗?如果是这种情况,您似乎没有正确地遵循convertView模式。是否是在给定时间屏幕上有大约7或8个列表项?您可能无法正确返回正确的视图。
如果您不熟悉,可以从Android手册中摘录一下ListViews的详细说明:http://commonsware.com/Android/excerpt.pdf
答案 2 :(得分:0)
我意识到这是一个相当古老的帖子,所以你可能已经解决了它,但为了像我这样的人来寻找答案的好处,我会分享我发现的东西。
我遇到了类似的问题,并对此问题进行了一些研究。本文:http://logc.at/2011/10/10/handling-listviews-with-multiple-row-types/给出了一些答案并解释了为什么会发生这种情况。似乎android listView只能“记住”它在任何时候在屏幕上看到的视图类型,以便保留内存。因此,当您的适配器在滚动时正确显示不同的数据时,刻度线将被视为另外7个其他视图。
一个解决方案(如果您希望始终勾选相同的行)是使用上面文章中的示例告诉listView使用2个或更多不同的行类型。
如果要动态应用刻度,则需要更新提供listView的适配器,然后调用adapter.notifyDataSetChanged更新列表。