【发布时间】:2026-01-27 17:20:05
【问题描述】:
我正在尝试在我的 android 应用程序中创建一个消息传递系统。当用户进入消息片段时,我需要用上一条消息填充消息列表。根据我的阅读,最好的方法是使用自定义适配器。
这是我的消息适配器
public class MessageAdapter extends ArrayAdapter<message> {
private final MessagesFragment context;
private final int layoutResourceId;
private final ArrayList<message> messages;
public MessageAdapter(MessagesFragment messagesFragment, int layoutResourceId, ArrayList<message> messages) {
super(null, layoutResourceId);
this.context = messagesFragment;
this.layoutResourceId = layoutResourceId;
this.messages = messages;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
View row = convertView;
ViewHolder holder = null;
int direction = messages.get(i).userType;
//show message on left or right, depending on if
//it's incoming or outgoing
if (row == null) {
LayoutInflater inflater = ((MessagesFragment)context).getLayoutInflater();
int res = 0;
if (direction == DIRECTION_INCOMING) {
res = R.layout.message_right;
} else if (direction == DIRECTION_OUTGOING) {
res = R.layout.message_left;
}
convertView = inflater.inflate(res, viewGroup, false);
holder = new ViewHolder();
holder.txtMessage = (TextView) convertView.findViewById(R.id.txtMessage);
holder.txtDate = (TextView) convertView.findViewById(R.id.txtDate);
row.setTag(holder);
}
holder.txtMessage.setText(messages.get(i).message);
holder.txtDate.setText(messages.get(i).time);
return row;
}
static class ViewHolder
{
TextView txtMessage;
TextView txtDate;
}
}
我在我的片段中的 onCreateView 中调用它。
// Generates all of the messages
ArrayList<message> messages = getMessages;
View messagesView = inflater.inflate(R.layout.messages, container, false);
ListView listView = (ListView)messagesView.findViewById(R.id.listMessages);
listView.setAdapter(new MessageAdapter(MessagesFragment.this, R.id.listMessages, messages));
...
每当我输入片段时,我的应用程序就会崩溃。我已经获取了一些示例代码并应用于我的应用程序,但我无法让它工作。我没有看到任何建议或明显错误?
【问题讨论】:
-
你能把崩溃日志放上去吗?并更改“super(null, layoutResourceId);”到“super(messagesFragment.getActivity(), layoutResourceId);”
标签: android android-fragments android-arrayadapter listadapter