Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
218 views
in Technique[技术] by (71.8m points)

android - RecyclerView items are not painted properly

In my ViewHolder, I have this method, that is called in the adapter when onBindViewHolder:

protected void bindViews(Item item) {
    dateTextView.setText(item.getDate());
    titleTxtView.setText(item.getTitle());
    if (item.hasMenu()) {
        Log.d("tag", "Item " + item.getId() + " has menu");
        menuButton.setVisibility(VISIBLE);
    } else {
        menuButton.setVisibility(INVISIBLE);
    }
}

But there are Items that doesn't have menu (that is hasMenu() returns false) but menuButton is shown and vice versa.

I think is because the item recycling because I have 100 items and just 2 have menu. It prints:

Item 31 has menu

Item 78 has menu

That's ok. However, in the app I can see that some other items are showing the menuButton and they shouldn't.

Should I force repaint each item when show/hide the menuButton? If so, how can I do it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use public int getItemViewType(int position) and public int getItemCount() to inflate two different layout,one with menu and other without the menu.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...