Android listview选择多行

Android listview选择多行,android,listview,multiple-select,Android,Listview,Multiple Select,我使用的是ArrayAdapter ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this, android.R.layout.simple_list_item_1, items); listView1.setAdapter(adapter); 这是因为适配器重用了膨胀的视图 一种解决方案是覆盖ArrayAdapter的getView()方法,以便正确渲染视图,并且(甚

我使用的是
ArrayAdapter

ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
                android.R.layout.simple_list_item_1, items);
listView1.setAdapter(adapter);

这是因为适配器重用了膨胀的视图


一种解决方案是覆盖
ArrayAdapter的
getView()
方法,以便正确渲染视图,并且(甚至更好)实现
ViewHolder
,这样就不会因为一次又一次地膨胀而失去任何性能

这是因为适配器重用了膨胀的视图


一种解决方案是覆盖
ArrayAdapter的
getView()
方法,以便正确渲染视图,并且(甚至更好)实现
ViewHolder
,这样就不会因为一次又一次地膨胀而失去任何性能

尝试进行此更改

listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {

            String item = listView1.getItemAtPosition(position);
            Log.d("position", position+", item");


        }
    });
listView1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
String item=listView1.getItemAtPosition(位置);
日志d(“位置”,位置+”,项目);
}
});

在下面的注释中更新您在logcat中获得的值,以便我可以建议更好的代码。

尝试进行此更改

listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {

            String item = listView1.getItemAtPosition(position);
            Log.d("position", position+", item");


        }
    });
listView1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
String item=listView1.getItemAtPosition(位置);
日志d(“位置”,位置+”,项目);
}
});

在下面的评论中更新您在logcat中获得的值,以便我可以建议一个更好的代码。

在链接共享的
CustomArrayAdapter
中,当您滚动或查看时,您正在更改
上的
relativeLayout
的颜色,您应该重置此布局,并为单击的项目启用颜色。例如,您可以使用这种方法

relativeLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int color;
                    if (tt8.getText().toString().equals("1")){
                        color = Color.RED;
                        relativeLayout.setBackgroundColor(color);
                    }else {
                        color = Color.GREEN;                        
                        relativeLayout.setBackgroundColor(color);
                    }
                    p.setColor(color);

                }
            });

relativeLayout.setBackgroundColor(p.getColor());

希望这能有所帮助。

在链接共享的
CustomArrayAdapter
中,您正在更改
单击侦听器上的
relativeLayout
的颜色,当您滚动或查看被回收时,您应该重置此布局并为您单击的项目启用颜色。例如,您可以使用这种方法

relativeLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int color;
                    if (tt8.getText().toString().equals("1")){
                        color = Color.RED;
                        relativeLayout.setBackgroundColor(color);
                    }else {
                        color = Color.GREEN;                        
                        relativeLayout.setBackgroundColor(color);
                    }
                    p.setColor(color);

                }
            });

relativeLayout.setBackgroundColor(p.getColor());


希望这能有所帮助。

您能发布适配器代码视图的可重用性吗。使用
ViewHolder
尝试使用parent.setSelection(int-position)来代替。当您滚动时是否会显示此选项?当我向下滚动时,我会看到另一个选择的项目。您可以发布适配器代码视图吗。使用
ViewHolder
尝试改用parent.setSelection(int-position)当您滚动时是否会出现这种情况?当我向下滚动时,我会看到另一个项目已被选中。请删除
relativeLayout.setOnClickListener
。。。。
getView
中的代码。保留原始帖子的
listView1.setOnItemClickListener()
。每次调用setOnItemClickListener时,都会在单击状态的布尔数组中保留。当调用
getView
时,请检查布尔数组并正确渲染红色或绿色,以确保循环视图未被重置。单击第一个项目时,此视图也将用于第11个项目。这就是为什么你的第11件物品也是绿色的。@mustansarseedagree@MustansarSaeed绝对好,删除
相对的yout.setOnClickListener
。。。。
getView
中的代码。保留原始帖子的
listView1.setOnItemClickListener()
。每次调用setOnItemClickListener时,都会在单击状态的布尔数组中保留。当调用
getView
时,请检查布尔数组并正确渲染红色或绿色,以确保循环视图未被重置。单击第一个项目时,此视图也将用于第11个项目。这就是为什么你的第11件物品也是绿色的。@mustansarseedagree@Mustansar赛义德:OP的问题完全不同。问题与视图回收和重置有关。但您的视图将提供对当前选定项目的引用,如果问题不属于输出,则即使如此,也不能跳转到意外索引。我觉得问题在于为ListView设置适配器,而不是跳转到意外的索引。问题是当它选择第一个项目时,这个视图也被用于第11个项目,这就是为什么两个项目显示为绿色。这种循环可以通过实现自定义arrayadapter和GetViews来管理。当我在listview中执行一些向上和向下的混合项目时,例如,选定的项目不再被选中……为什么您不选择项目选定的列表呢OP的问题不同。问题与视图回收和重置有关。但您的视图将提供对当前选定项目的引用,如果问题不属于输出,则即使如此,也不能跳转到意外索引。我觉得问题在于为ListView设置适配器,而不是跳转到意外的索引。问题是当它选择第一个项目时,这个视图也被用于第11个项目,这就是为什么两个项目显示为绿色。可以通过实现自定义arrayadapter和GetViews来管理此循环。当我在listview中执行一些上下混合项目时,例如,选定的项目不再被选中……您为什么不喜欢选定的项目Listener我想这是1分钟:)我想这是1分钟:)