1

我有一个带有自定义适配器的 ListView。在每一行中都有一个 ImageView,它只在某些约束下可见。问题是,如果第一行有这个 ImageView 可见,那么最后一行也是如此,反之亦然。

这是getView()我的适配器的代码。

public View getView(int position, View view, ViewGroup parent) {
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.row_idea, null);
    }

    Idea idea = mIdeas.get(position);

    if (idea != null) {
        ImageView imgAlarm = (ImageView) view
                .findViewById(R.id.imgAlarm_rowIdea);
        if (idea.getTimeReminder() != null)
            imgAlarm.setVisibility(ImageView.VISIBLE);

        TextView lblTitle = (TextView) view
                .findViewById(R.id.lblTitle_rowIdea);
        lblTitle.setText(idea.getTitle());

        TextView lblDescription = (TextView) view
                .findViewById(R.id.lblDescription_rowIdea);
        lblDescription.setText(idea.getDescription());
    }
    return view;
}

mIdeas是一个ArrayList包含所有要显示在 中的数据ListViewimgAlarmImageView我上面说的。

4

2 回答 2

2

如果条件不满足,您将希望恢复可见性状态,ImageView这样您就不会遇到潜在的回收视图问题(它可能ImageView已经可见并在不应该出现时出现):

if (idea.getTimeReminder() != null) {
     imgAlarm.setVisibility(ImageView.VISIBLE);
} else {
    imgAlarm.setVisibility(ImageView.INVISIBLE); // or GONE
}
于 2013-01-19T20:34:34.070 回答
2

改变

if (idea.getTimeReminder() != null)
            imgAlarm.setVisibility(ImageView.VISIBLE);

if (idea.getTimeReminder() != null)
            imgAlarm.setVisibility(ImageView.VISIBLE);
else
            imgAlarm.setVisibility(ImageView.GONE);

这里发生的是适配器正在“回收”视图。因此,在您在测试中看到的情况下,最后一个视图和第一个视图实际上是同一个实例。

于 2013-01-19T20:34:57.553 回答