gpt4 book ai didi

java - 使用 Android FirebaseListAdapter 时如何使用两种布局?

转载 作者:行者123 更新时间:2023-12-02 11:57:02 26 4
gpt4 key购买 nike

我正在制作一个使用 Cloud Firebase 的 Android 聊天应用。在用消息填充 ListView 时,我想使用两种布局,一种用于传入消息,一种用于传出消息。当遵循执行类似操作的教程时,

( http://www.devexchanges.info/2016/12/simple-chat-application-using-firebase.html )

他们创建了自己的 messageAdapter 类,该类引入了一个 getView 函数,该函数将根据消息返回两个 View 之一。但在此类的构造函数中, super() 语句对我不起作用。这是构造函数:

public MessageAdapter(Lobby activity, Class<ChatMessage> modelClass, int modelLayout, DatabaseReference ref) {

super(activity, modelClass, modelLayout, ref);
this.activity = activity;
}

这与教程使用它完全相同,但由于某种原因在我自己的应用程序上下文中它不起作用。我必须对 FirebaseListAdapter 类执行某些操作才能允许此操作吗?如果您需要查看我的项目中的任何其他代码,我将很乐意编辑以包含它,任何帮助将不胜感激。谢谢。

最佳答案

尝试使用 RecyclerView 和 RecyclerView.Adapter 而不是 FirebaseListAdapter,如下所示:

public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
private static final int CHAT_END = 1;
private static final int CHAT_START = 2;

private List<Chat> mDataSet;
private String mId;

/**
* Called when a view has been clicked.
*
* @param dataSet Message list
* @param id Device id
*/
ChatAdapter(List<Chat> dataSet, String id) {
mDataSet = dataSet;
mId = id;
}

@Override
public ChatAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;

if (viewType == CHAT_END) {
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_chat_end, parent, false);
} else {
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_chat_start, parent, false);
}

return new ViewHolder(v);
}

@Override
public int getItemViewType(int position) {
if (mDataSet.get(position).getId().equals(mId)) {
return CHAT_END;
}

return CHAT_START;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Chat chat = mDataSet.get(position);
holder.mTextView.setText(chat.getMessage());
}

@Override
public int getItemCount() {
return mDataSet.size();
}

/**
* Inner Class for a recycler view
*/
class ViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;

ViewHolder(View v) {
super(v);
mTextView = (TextView) itemView.findViewById(R.id.tvMessage);
}
}
}

更多信息请访问https://github.com/thaleslima/firebase-chat-sample .

关于java - 使用 Android FirebaseListAdapter 时如何使用两种布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com