Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有奇怪行为的片段ListView_Android_Listview_Android Fragments - Fatal编程技术网

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
方法中设置的,就像在文章中显示的一样(已编辑)。那么,在列表视图中显示什么呢?您没有任何对象列表?它是一个带有文本视图和复选框的简单列表。请参阅更新的答案。