我有一个消息传递应用程序,我想显示使用两种不同布局发送的传入消息和消息。这两个使用相同的适配器是我的代码...
非常感谢任何帮助!
这是我动态添加到listview的项目(发送消息)
post_message_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView username = (TextView) findViewById(R.id.conversation_username2);
convoItems.add(new ConversationItem(1656, 1, "Bob Doe", DateTime.now(), write_message.getText().toString()));
convoAdapter.notifyDataSetChanged();
if (v.getId() == R.id.send_message_button);
write_message.setText("");
}
});
convoListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Toast.makeText(ConversationView.this, "Clicked", Toast.LENGTH_LONG)
// .show();
}
});
这是我的适配器我希望onClick使用布局2
if (convertView == null) {
convertView = getLayoutInflater().inflate
(R.layout.conversation_list_item, parent, false);
//Username
TextView username = (TextView) convertView
.findViewById(R.id.conversation_username);
username.setText(items.get(position).convoUsername);
//Date Time
TextView dateTime = (TextView) convertView
.findViewById(R.id.conversation_date);
dateTime.setText(items.get(position).DateTimeStamp.toString());
//Message
TextView message = (TextView) convertView
.findViewById(R.id.conversation_message);
message.setText(items.get(position).Message);
} else {
convertView = getLayoutInflater().inflate
(R.layout.activity_conversation_item_send, parent, false);
//Username
TextView username = (TextView) convertView
.findViewById(R.id.conversation_username2);
username.setText(items.get(position).convoUsername);
//Date Time
TextView dateTime = (TextView) convertView
.findViewById(R.id.conversation_date2);
dateTime.setText(items.get(position).DateTimeStamp.toString());
//Message
TextView message = (TextView) convertView
.findViewById(R.id.conversation_message2);
message.setText(items.get(position).Message);
}
答案 0 :(得分:0)
我认为最简单的方法是在ConversationItem
中存储一个标志,告知该项目是虚拟项目还是动态创建的。 (另一种方法是将ConversationItem
类子类化,以区分两种不同类型的项目。)
添加一个新的if case以检查标志是true还是false。但是,对于这两种情况,请不要忘记检查convertView
是否为空,并在需要时膨胀正确的布局文件。
请注意,如果convertView
不为空,则意味着将重新使用已经膨胀的视图。