【问题标题】:Erratic behaviour of listview (Android)列表视图的不稳定行为(Android)
【发布时间】:2013-09-03 18:37:02
【问题描述】:

在我的列表视图中,我有一个使用 TreeMap 构建的自定义适配器,我定义了 getView 方法,如下所示。我试图在单击时删除列表视图的特定文本视图中的文本,只有那些包含特定字符模式(y@y)的文本视图才会被删除。但是,单击列表视图中的一行时,我对其他行产生了删除效果。

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



        if (convertView == null) { 
            convertView = inflater.inflate(R.layout.chklistlayout, parent, false); 
        }
        TextView textView = ((TextView) convertView.findViewById(R.id.textView1));
        TextView imageview = ((TextView) convertView.findViewById(R.id.textView2));
        textView.setText(values[position]);
        imageview.setText(mValues[position]);


        String s = mValues[position];
        if (s.contains("y@y")) {
            System.out.println("In if of getview");
            System.out.println(s);
            imageview.setPaintFlags(imageview.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
        } else {

        }

        return convertView;
    }
}

我也尝试使用持有人模式,使用静态持有人类,但问题似乎仍然存在。任何指针?

【问题讨论】:

  • 使用else块来处理这个,imageview.setPaintFlags()不要罢工
  • 这种行为背后的原因是什么,尽管让 else 为空应该有效?我改变了它,你能告诉我我传递给 .setPaintFlags() 的参数是什么,它要求我提供一个 int 参数。
  • 因为 convertView。当您滚动列表时,之前使用的相同视图将返回给 getView 方法。所以你之前用 StrikeThrough 绘制的同一个 imageView 仍然用它绘制。所以你必须恢复那个动作。
  • 好吧,伙计们,这对我有用,发布答案,我会接受!
  • 这背后的原因是回收,我不知道Paint flags,我想说的是在你的else阻止尝试删除引人注目的标志,有关ListView recycler 的更多详细信息,请参阅stackoverflow.com/a/14108676/1939564

标签: android android-listview


【解决方案1】:

这个答案一半是我的,一半来自 Muhammad Babar,我们都对这个问题发表了评论,共同做出了一个很好的答案:

使用 else 块来处理,imageview.setPaintFlags() 不触发

发生这种情况

因为convertView。当您滚动列表时,相同的视图 之前使用的是返回给 getView 方法。所以一样 你之前用 StrikeThrough 绘制的 imageView 仍然被绘制 用它。所以你必须恢复那个动作。

此外,由于这种回收,通常与适配器打交道,您必须始终撤消/还原/重绘/更改文本/更改所有元素的图像,以确保它以您想要的方式显示在屏幕上。

ps.:现在您应该应用 Holder 模式以获得更好的性能。

【讨论】:

  • 我之前使用的是持有者模式,但由于这种不稳定的行为,我在 YouTube 视频“列表视图的世界”中听了 Romain 家伙一个多小时。现在我知道了问题所在,我将回到持有人模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多