我正在处理消息传递应用程序,并希望将聊天气泡设置为来自左侧或右侧,具体取决于消息所有者是谁。
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
但是无法得到它的观点。我该如何解决这个问题?
答案 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);
如果您想了解进一步的说明,请与我们联系。