Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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 选中的简单列表项在单击时检查多个项_Android_List_Listview - Fatal编程技术网

Android 选中的简单列表项在单击时检查多个项

Android 选中的简单列表项在单击时检查多个项,android,list,listview,Android,List,Listview,好的,我正在制作一个简单的待办事项列表应用程序,它从一组字符串数组中读取项目,并在列表视图中将它们显示为一个简单的列表项目。一切都很好,我设置了onClickListener,这样它会检查我正在点击的内容,但是,当我点击一个项目时,它也会检查项目8,重复。(即,我点击顶部的项目,它得到一个检查,项目8向下得到检查,然后8向下得到检查,等等)以下是主要活动的代码: package com.disneyland; import android.app.ListActivity; import a

好的,我正在制作一个简单的待办事项列表应用程序,它从一组字符串数组中读取项目,并在列表视图中将它们显示为一个简单的列表项目。一切都很好,我设置了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());

            }
        });



    }
}
package com.disneyland;
导入android.app.ListActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.CheckedTextView;
导入android.widget.ListView;
导入android.widget.AdapterView.OnItemClickListener;
公共类启动扩展了ListActivity{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String[]Rides=getResources().getStringArray(R.array.Rides);
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_checked,Rides));
ListView lv=getListView();
lv.setTextFilterEnabled(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
CheckedTextView检查=(CheckedTextView)视图;
check.setChecked(!check.isChecked());
}
});
}
}

显然,我的问题是为什么会发生这种情况,以及如何解决它?

我不能肯定,但我有一个猜测。您是否正在适配器的getView方法中使用convertView执行某些操作?如果是这种情况,您似乎没有正确遵循convertView模式。在给定的时间内,您的屏幕上是否有大约7或8个列表项?您可能没有正确返回正确的视图


如果你不熟悉使用列表视图,这本摘自安卓系统书籍的文章将为你提供一个很好的解释:

我意识到这是一篇很老的文章,所以你可能已经解决了它,但为了像我这样来寻找答案的人的利益,我将分享我的发现

我也遇到过类似的问题,并对这个问题做了一些研究。本文:给出了一些答案,并解释了为什么会发生这种情况。为了保存内存,android listView似乎只“记住”屏幕上任何时候可以看到的视图类型。因此,虽然您的适配器会在滚动时正确显示不同的数据,但勾号被视为其他7个视图中的一个不同视图

一种解决方案(如果您希望始终勾选相同的行)是使用上面文章中的示例来告诉listView使用2种或更多不同的行类型


如果希望动态应用刻度,则需要更新为listView提供数据的适配器,然后调用adapter.notifyDataSetChanged来更新列表。

我也遇到了这个问题,并成功地解决了这个问题。 我跟踪了icecreamman的链接,发现我的ListView XML缺少一行:

android:choiceMode="multipleChoice" 
这允许选择多个项目。如果我选择了singleChoice,那么在任何时候都只能检查列表中的一项,就像单选按钮一样。这句话解决了我的问题