Android 具有奇怪行为的片段ListView
我有一个Android 具有奇怪行为的片段ListView,android,listview,android-fragments,Android,Listview,Android Fragments,我有一个列表视图,在扩展片段列表的片段中有复选框。奇怪的行为是,单击一个项目时会检查多个项目。 奇怪的是,当列表被滚动时,一些项目会被自动选中或取消选中,而我没有ScrollListener设置 代码如下: @Override public void onStart() { super.onStart(); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @O
列表视图
,在扩展片段列表的片段中有复选框
。奇怪的行为是,单击一个项目时会检查多个项目。
奇怪的是,当列表被滚动时,一些项目会被自动选中或取消选中,而我没有ScrollListener
设置
代码如下:
@Override
public void onStart() {
super.onStart();
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.chk);
if (mCheckBox.isChecked()) {
mCheckBox.setChecked(false);
getListView().setItemChecked(i, false);
} else {
mCheckBox.setChecked(true);
getListView().setItemChecked(i, true);
}
mCallback.onArticleSelected(i, isChoice);
}
});
}
@覆盖
public void onStart(){
super.onStart();
getListView().setOnItemClickListener(新的AdapterView.OnItemClickListener()){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
复选框mCheckBox=(复选框)view.findviewbyd(R.id.chk);
if(mCheckBox.isChecked()){
mCheckBox.setChecked(false);
getListView().setItemChecked(i,false);
}否则{
mCheckBox.setChecked(真);
getListView().setItemChecked(i,true);
}
mCallback.onArticleSelected(i,isChoice);
}
});
}
所需:
(来源:)ListView
的项目在滚动时回收。您应该在列表视图
行对象中放置一个布尔
参数(isChecked),然后在getView方法中,您应该使用该布尔
参数初始化复选框
。例如:
假设您的行对象:
public class Trial{
public String title;
public boolean isChecked;
}
在ListView
适配器的getView方法中,您应该检查对象的isChecked
参数:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View view = inflater.inflate(R.layout.your_listview_item, parent, false);
Trial item = items.get(position);
yourHolder.checkBox = (CheckBox) view.findViewById(R.id.chk);
yourHolder.checkBox.setChecked(item.isChecked);
return view;
}
祝你好运。Listview的视图被回收。如果listview回收具有选中状态的视图,则新视图将处于选中状态。所以,您需要将选中状态保存为列表,并在创建时更新视图。大多数情况下,我们使用SparseBooleanArray。我没有实现任何holder或任何row对象,因为我扩展了ListFragment
。OnClick
是在OnStart
方法中设置的,就像在文章中显示的一样(已编辑)。那么,在列表视图中显示什么呢?您没有任何对象列表?它是一个带有文本视图和复选框的简单列表。请参阅更新的答案。