滚动列表视图时,还显示取消选择的图像

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() 方法,因此您将 Bi​​nForAll 实例标记为 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

以上是关于滚动列表视图时,还显示取消选择的图像的主要内容,如果未能解决你的问题,请参考以下文章

从上到下滚动时如何自动停止对项目的列表视图取消选择?

滚动列表时视图意外更改

当我滚动列表视图单选按钮被自动选择或取消选择无法保持单选按钮的状态

集合视图按钮背景图像在滚动时重复

取消选择并向下滚动后,列表视图中的复选框被选中。

首先显示错误的图像,然后在滚动列表视图期间显示正确的图像