我正在尝试实施自定义列表视图。一切正常,直到我在if ()
方法
getView()
语句
如果没有if()
条件,当我选择一个项目时会选择一个项目但是当我添加if()
条件时,视图会正确显示但是会选择两个项目(非相邻)最后一个或第二个,任何这样的组合。)
View getView(...){
....
if (!item.getPriceTo().equals(""))
priceToTV.setText(item.getPriceTo());
else
priceToTV.setText(item.getPriceFrom());
return view;
}
此外,我使用保存上一个视图来显示选择,以便当前选择有一个red_border,当选择它时,black_border设置为它。:
subItemsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.d("New Order", "........");
if (previousViewOfSubItems != null && previousViewOfSubItems != view) {
previousViewOfSubItems.setBackgroundResource(R.drawable.black_border);
if (quantity.getText().toString().equals("xx") || quantity.getText().toString().equals("0")) {
viewForVisibility.setVisibility(View.GONE);
layoutForQuantity.setVisibility(View.GONE);
}
}
if (previousViewOfSubItems == view)
return;
previousViewOfSubItems = view;
previousViewOfSubItems.setBackgroundResource(R.drawable.red_border);
viewForVisibility = previousViewOfSubItems.findViewById(R.id.viewForVisibility);
viewForVisibility.setVisibility(View.VISIBLE);
layoutForQuantity = (LinearLayout) previousViewOfSubItems.findViewById(R.id.layoutForQuantity);
layoutForQuantity.setVisibility(View.VISIBLE);
quantity = (TextView) previousViewOfSubItems.findViewById(R.id.subTypeQuantity);
}
});
答案 0 :(得分:1)
previousViewOfSubItems = view;
似乎导致了这个问题,
在带有适配器的Listviews中,您应该避免保存视图实例,因为适配器会重复使用视图,因此两行的视图可以相同,而不是保存视图实例的引用[{3}}并使用视图标记
答案 1 :(得分:1)
您需要使用ViewHolder Pattern和视图标记来正确识别不同位置的每个视图。 ListView始终回收视图,而不是一次又一次地重新膨胀视图。
您可以参考Android Training documentation了解如何实现ViewHolder模式。
答案 2 :(得分:0)
ListViews回收列表中的视图。滚动时,将重复使用顶视图,并使用这些方法替换内容。
如果您将背景设置为红色等,请使用Else语句将其设置为默认黑色。
答案 3 :(得分:0)
因为它的列表视图重复使用视图来显示项目,一旦滚动出第一个视图,就会重复使用相同的视图来显示列表视图底部的视图。而不是比较视图尝试compair点击视图的位置
答案 4 :(得分:0)
我在Recyclerview上的blog中解释了这个异常行为,你引用它来解决这个问题。
使用pojo类获取状态并相应地更新视图