同时访问列表项的视图和数据
Accessing a list item's view and data at the same time
我正在开发一个消息传递应用程序,我想根据消息的所有者将聊天气泡设置为来自左侧或右侧。
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
但无法获得它的视图。我该如何解决这个问题?
如果你是从 ListView 转到 RecyclerView,那么就很容易理解了。
getView() (of ListView) == onCreateViewHolder() + onBindViewHolder();
如果你还记得我们需要检查 getView 给出的视图是否为空,如果它为空那么我们需要注意实例化,否则将数据设置到相应的视图。
RecyclerView
让我们的生活变得轻松,onCreateView
为每一行创建新的视图实例(最低要求),onBindViewHolder
负责将数据绑定到每个视图元素。
我想你现在清楚为什么以及如何处理RecyclerView
的这两个方法了。
根据您的代码,行 view.findViewById(R.id.message_text)
应该移动到您的 ViewHolder class。
下面几行将进入 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);
如果您想了解进一步的说明,请告诉我。
我正在开发一个消息传递应用程序,我想根据消息的所有者将聊天气泡设置为来自左侧或右侧。
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
但无法获得它的视图。我该如何解决这个问题?
如果你是从 ListView 转到 RecyclerView,那么就很容易理解了。
getView() (of ListView) == onCreateViewHolder() + onBindViewHolder();
如果你还记得我们需要检查 getView 给出的视图是否为空,如果它为空那么我们需要注意实例化,否则将数据设置到相应的视图。
RecyclerView
让我们的生活变得轻松,onCreateView
为每一行创建新的视图实例(最低要求),onBindViewHolder
负责将数据绑定到每个视图元素。
我想你现在清楚为什么以及如何处理RecyclerView
的这两个方法了。
根据您的代码,行 view.findViewById(R.id.message_text)
应该移动到您的 ViewHolder class。
下面几行将进入 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);
如果您想了解进一步的说明,请告诉我。