同时访问列表项的视图和数据

时间:2016-06-18 17:54:43

标签: android android-layout android-recyclerview android-view android-viewholder

我正在处理消息传递应用程序,并希望将聊天气泡设置为来自左侧或右侧,具体取决于消息所有者是谁。

public class Message {
    public String messageText;
    public boolean mine;

    // ...Constructor
}

内部MessageAdapter我有:

@Override
public MessageHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(this.itemResource, parent, false);
    return new MessageHolder(this.context, view);
}

@Override
public void onBindViewHolder(MessageHolder holder, int position) {

    Message message = this.messages.get(position);
    holder.bindMessage(message);
}

我一直在关注从ListView迁移到RecyclerView的教程,现在还不清楚如何在不获取NullPointerException的情况下同时访问项目的数据及其视图。我想使用的代码如下所示:

Drawable background = getResources().getDrawable(message.mine ? R.drawable.bubble_right : R.drawable.bubble_left);
background.setColorFilter(getResources().getColor(R.color.ColorPrimary), PorterDuff.Mode.SRC_IN);

view.findViewById(R.id.message_text).setBackgroundDrawable(background);

但是,如果我把它放在onCreateViewHolder中,我无法弄清楚如何访问单个邮件来检查所有权。如果我把它放在onBindViewHolder我有message但是无法得到它的观点。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您要从ListView转移到RecyclerView,那么它很容易理解。

getView() (of ListView) == onCreateViewHolder() + onBindViewHolder();

如果你还记得我们需要检查getView给出的视图是否为null,如果它为null,那么我们需要处理实例化,否则将数据设置为相应的视图。 RecyclerView让我们的生活轻松,onCreateView创建每行视图的新实例(最低要求),onBindViewHolder负责将数据绑定到每个视图元素。

我认为现在你很清楚为什么以及如何处理RecyclerView这两种方法。 根据您的代码,行view.findViewById(R.id.message_text)应该移动到您的ViewHolder类。 以下几行将放在onBindViewHolder

Drawable background = getResources().getDrawable(message.mine ? R.drawable.bubble_right : R.drawable.bubble_left);
background.setColorFilter(getResources().getColor(R.color.ColorPrimary), PorterDuff.Mode.SRC_IN);
holder.your_view.setBackgroundDrawable(background);

如果您想了解进一步的说明,请与我们联系。