![](/img/trans.png)
[英]How to handle/inflate more then one recycleview activity from an adapter class
[英]may i inflate two list layout in one RecycleView Adapter?
我想做什么? 我有一个 SQLite 数据表,我想从该数据表中为不同的活动显示不同的列。 为此,我使用回收视图,并为该回收视图创建两个模型列表视图布局。 然后创建一个 RecylerView Adapter。 在onCreateViewHolder方法中,我想膨胀两个模型列表视图布局。 这是我的意思的代码
您可以尝试按照 recyclerview 多视图类型在一个适配器类中托管两个布局
是的,你可以这样做。
多亏了getItemViewType
方法,您可以返回不同的view type
值,这些值可以在onCreateViewHolder
捕获,并取决于您可以膨胀不同布局的值。
我能够为聊天消息创建一个适配器,无论是发送还是接收text/image
我根据view typeviewType
膨胀不同的布局
指定viewType
值的代码
@Override
public int getItemViewType(int position) {
/**
* check the user id to detect if a message sent or received
* then check if a message is a text or image
*/
String userID = Constant.itemUser.getId();
MessageModel message = messages.get(position);
if (userID.equals(message.getUserId())) {
if (message.getType().equals("1")) {
return MessageType.SENT_TEXT;
} else if (message.getType().equals("2")) {
return MessageType.SENT_IMAGE;
}
} else {
if (message.getType().equals("1")) {
return MessageType.RECEIVED_TEXT;
} else if (message.getType().equals("2")) {
return MessageType.RECEIVED_IMAGE;
}
}
return super.getItemViewType(position);
}
并在名为onCreateViewHolder
的方法中
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
/**
* check the type of view and return holder
*/
if (viewType == MessageType.SENT_TEXT) {
return new SentTextHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_sent_message_text, parent, false));
} else if (viewType == MessageType.SENT_IMAGE) {
return new SentImageHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_sent_message_img, parent, false));
} else if (viewType == MessageType.RECEIVED_TEXT) {
return new ReceivedTextHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_received_message_text, parent, false));
} else if (viewType == MessageType.RECEIVED_IMAGE) {
return new ReceivedImageHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_received_message_img, parent, false));
}
return null;
}
请不要忘记在onBindViewHolder
处理holders
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder mHolder, int position) {
int type = getItemViewType(position);
MessageModel message = messages.get(position);
/**
* check message type and init holder to user it and set data in the right place for every view
*/
if (type == MessageType.SENT_TEXT) {
// case of message sent of type text
} else if (type == MessageType.SENT_IMAGE) {
// case of message sent of type img
} else if (type == MessageType.RECEIVED_TEXT) {
ReceivedTextHolder holder = (ReceivedTextHolder) mHolder;
// case of the message received of type text
} else if (type == MessageType.RECEIVED_IMAGE) {
// etc
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.