【问题标题】: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();
                    }

            }
        });

【问题讨论】:

    标签: android android-listview


    【解决方案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"
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多