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分钟:)