滚动列表视图时,还显示取消选择的图像
Posted
技术标签:
【中文标题】滚动列表视图时,还显示取消选择的图像【英文标题】:When Scrolling Listview the deselected images also shown 【发布时间】:2012-10-10 21:52:06 【问题描述】:我有一个问题,当我向下滚动列表视图时,显示的隐藏图像......这个问题是如何解决的......??提前致谢... 这是我的代码:- @覆盖 public View getView(final int position, View convertView, ViewGroup parent)
View v = convertView;
if(v==null)
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v=li.inflate(R.layout.custom_row,parent,false);
TextView Title = (TextView) v.findViewById(R.id.custom_text);
final RelativeLayout content = (RelativeLayout) v.findViewById(R.id.main);
final ImageView img1 =(ImageView) v.findViewById(R.id.cust_img);
final BinForAll listitem = mList.get(position);
Title.setText(listitem.getTxt());
//Desc.setText(listitem.getDesc());
content.setOnClickListener(new OnClickListener()
public void onClick(View arg0)
if(img1.getVisibility()==View.VISIBLE && count>=0)
count++;
img1.setVisibility(View.GONE);
m1.remove(mList.get(position).getTxt());
Log.d("remove", mList.get(position).getTxt());
else if(img1.getVisibility()==View.GONE && count>0)
count--;
img1.setVisibility(View.VISIBLE);
m1.add(mList.get(position).getTxt());
Log.d("add", mList.get(position).getTxt());
else
Toast.makeText(getApplicationContext(), "You can not add more than 10 values..", 1).show();
);
【问题讨论】:
【参考方案1】:ListView 总是重用视图。因此,每次通过Adapter.getView(final int position, View convertView, ViewGroup parent)
为 ListView 准备视图时,您都应该检查视图是否处于适当的状态。
为了解决您的问题,您可以在 final BinForAll listitem = mList.get(position);
对象中保持可见性状态(只需将布尔值添加到 BinForAll 类)并重写您的 getView 方法,如下所示:
@Override
public View getView(final int position, View convertView, ViewGroup parent)
View v = convertView;
if(v==null)
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v=li.inflate(R.layout.custom_row,parent,false);
TextView Title = (TextView) v.findViewById(R.id.custom_text);
final RelativeLayout content = (RelativeLayout) v.findViewById(R.id.main);
final ImageView img1 =(ImageView) v.findViewById(R.id.cust_img);
final BinForAll listitem = mList.get(position);
Title.setText(listitem.getTxt());
// each time set visibility for your image view
img1.setVisibility(listitem.isVisible() ? View.VISIBLE : View.GONE);
//Desc.setText(listitem.getDesc());
content.setOnClickListener(new OnClickListener()
public void onClick(View arg0)
if(img1.getVisibility()==View.VISIBLE && count>=0)
count++;
img1.setVisibility(View.GONE);
// save visibility state
listitem.setVisible(false);
m1.remove(mList.get(position).getTxt());
Log.d("remove", mList.get(position).getTxt());
else if(img1.getVisibility()==View.GONE && count>0)
count--;
img1.setVisibility(View.VISIBLE);
// save visibility state
listitem.setVisible(true);
m1.add(mList.get(position).getTxt());
Log.d("add", mList.get(position).getTxt());
else
Toast.makeText(getApplicationContext(), "You can not add more than 10 values..", 1).show();
);
【讨论】:
这是对的,但是当滚动列表视图时,可见(选定)图像也被隐藏了...... 正如我所写的 'img1.setVisibility(listitem.isVisible() ? View.VISIBLE : View.GONE);'应该避免你的问题。 假设我选择了 2 行,并且在我向下滚动之后...然后通过在列表视图中向上滚动返回后,这些选定的两行也被取消选择... 为什么?当您选择第一项时 - 调用了 onClick() 方法,因此您将 BinForAll 实例标记为 listitem.setVisible(true) 的“已选择”。向下和向上滚动后,您的 getView() 再次调用第一个位置,您可以通过调用 listitem.isVisible() 定义选择列表项并设置图像视图的可见性。【参考方案2】:将此属性添加到您的 listView
android:scrollingCache="false"
android:persistentDrawingCache="scrolling"
android:fastScrollEnabled="true"
android:cacheColorHint="@android:color/transparent"
【讨论】:
它对我不起作用。但是这个有效:***.com/a/6682552/846316以上是关于滚动列表视图时,还显示取消选择的图像的主要内容,如果未能解决你的问题,请参考以下文章