扩展BaseAdapter for ListView getView不正确地更新视图

时间:2013-02-01 16:51:29

标签: android android-view baseadapter

我有一个RSS Feed查看器,想要向用户显示他们上次收听特定Feed的时间。

这适用于列表中加载的第一个项目(当前视图中可见的项目),但是当用户向下滚动列表视图时,隐藏了每个其他查看的Feed的lastViewedText。此外,当用户向上滚动到顶部(之前成功显示lastViewedText的位置)时,lastViewedText现在已隐藏。 BaseAdapters getView方法是我设置可见性的地方。

自定义BaseAdapter:

public class PodcastAdapter extends BaseAdapter{

    private ArrayList<Podcast> feed;
    private LayoutInflater inflater = null;

    public PodcastAdapter(Activity a, ArrayList<Podcast> feed){
        this.feed = feed;
        inflater = (LayoutInflater)a.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return feed.size();
    }

    public Object getItem(int position) {
        return feed.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if(convertView == null)
            vi = inflater.inflate(R.layout.rss_listview_item, null);

        TextView title = (TextView)vi.findViewById(R.id.title);
        TextView desc = (TextView)vi.findViewById(R.id.description);
        TextView date = (TextView)vi.findViewById(R.id.date);
        TextView lastViewedText = (TextView)vi.findViewById(R.id.lastViewedText);

        Podcast feedIndex = feed.get(position);

        title.setText(feedIndex.Title);
        desc.setText(feedIndex.Description);
        date.setText(feedIndex.Date);
        lastViewedText.setText(feedIndex.LastViewedText);


        if(feedIndex.LastViewedText.equals("")){
            lastViewedText.setVisibility(View.GONE);
        }

        return vi;
    }
}

为什么视图无法正确更新?标题,desc,日期都正确加载!

2 个答案:

答案 0 :(得分:2)

   if(feedIndex.LastViewedText.equals("")){
            lastViewedText.setVisibility(View.GONE);
        } else {
            lastViewedText.setVisibility(View.VISIBLE);
    }

视图隐藏在转换视图中,你不要取消隐藏它:)

此外,您可以使用TextUtils.isEmpty(CharSequence string)来检查String是空还是空。

答案 1 :(得分:1)

改为:

    if(feedIndex.LastViewedText.equals("")){
        lastViewedText.setVisibility(View.GONE);
    }else{
        lastViewedText.setVisibility(View.VISIBLE);
    }