Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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/3/android/226.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
Java android:ListView中的混沌选择_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

Java android:ListView中的混沌选择

Java android:ListView中的混沌选择,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,在我的应用程序中,我有一个列表视图和阵列适配器。当我在ListView中选择某个元素时,我还可以看到几个选定的元素 此外,当我在列表视图中滚动元素时(选择后),我的选择消失,元素被随机选择 适配器代码: final ListAdapter adapter=new ArrayAdapter(活动、R.layout.simple\u列表\u项目\u多选、位置组件){ @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ if(convertView==null){ conver

在我的应用程序中,我有一个
列表视图
阵列适配器
。当我在
ListView
中选择某个元素时,我还可以看到几个选定的元素

此外,当我在
列表视图中滚动元素时(选择后),我的选择消失,元素被随机选择

适配器代码:

final ListAdapter adapter=new ArrayAdapter(活动、R.layout.simple\u列表\u项目\u多选、位置组件){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=LayoutFlater.充气(layout.simple\u test\u layout\u带有一个\u文本\u字段,空);
}
返回视图;
}
};
看起来必须设置一些参数

你能帮我避免这个问题吗


UPD1

final ListAdapter adapter=new ArrayAdapter(活动、R.layout.simple\u列表\u项目\u多选、位置组件){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终位置视图支架;
if(convertView==null){
convertView=LayoutFlater.充气(layout.rp\u bin\u locations\u block\u元素,父元素,false);
viewHolder=新位置viewHolder();
viewHolder.init(convertView);
convertView.setTag(viewHolder);
}否则{
viewHolder=(LocationsViewHolder)convertView.getTag();
}
final BinLocation BinLocation=locationComponents.get(position).getBinLocation();
if(binLocation!=null){
viewHolder.provideValues(binLocation);
}
返回视图;
}
类位置viewholder{
TextView站点名称;
TextView rackName;
文本视图binName;
文本视图卷;
NumberPicker numberOfItems;
公共void init(视图){
stationName=(TextView)view.findViewById(id.ro\u station\u name);
rackName=(TextView)view.findViewById(id.ro\u rack\u name);
binName=(TextView)view.findViewById(id.ro\u bin\u name);
volume=(TextView)view.findViewById(id.ro\u volume\u value);
numberOfItems=(NumberPicker)view.findViewById(id.ro\u number\u of\u items);
}
公共void提供贬值(BinLocation位置){
setText(location.getStationName());
rackName.setText(location.getRackName());
setText(location.getBinName());
volume.setText(valueOf(location.getVolume());
}
}
};
简单列表项多项选择这是android sdk的文件:


哇,这是你在第一个
列表视图中遇到的第一个障碍。别担心。首先,了解
ListView
的工作原理,它很重要。否则您无法掌握
列表视图
。简而言之:
ListView
创建很少的行
View
s,并对每一行使用它们。因此,如果在
ListView
中有50个元素,那么在convertView为null的情况下调用
getView()
的次数可能只有10次。因此,简而言之,如果您不为每个位置更新
getView()
方法中视图的状态,这将是一场混乱。另外,请在您的
列表视图中使用视图支架模式。它将大大增加滚动,并将利用更少的资源。更多关于视图保持器模式的信息

更新:

我说

因此,简而言之,如果您不为每个位置更新
getView()
方法中视图的状态,这将是一场混乱


根据需要调整此代码您可以在
bin位置
中使用布尔变量来维护选中的位置。但是请记住并理解在
getView()中维护状态的要点

请发布
simple\u list\u item\u multiple\u selection.xml
源代码以获得准确的答案。感谢您的回复,我根据模式更改了代码,但仍然存在问题。。代码在上面的更新中。。
 private SparseBooleanArray checkedPositions = new SparseBooleanArray();// class variable


listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
             if(checkedPositions.get(position)){
                 checkedPositions.put(position, false);
             }else{
                 checkedPositions.put(position, true);
             }
        }

    });
((CheckedTextView)convertView.findViewById(R.id.checkedTextView)).setChecked(checkedPositions.get(position));