将布局应用于项目

时间:2015-02-22 21:23:52

标签: android android-layout android-listview android-adapter

我有一个消息传递应用程序,我想显示使用两种不同布局发送的传入消息和消息。这两个使用相同的适配器是我的代码...

非常感谢任何帮助!

这是我动态添加到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);

            }

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是在ConversationItem中存储一个标志,告知该项目是虚拟项目还是动态创建的。 (另一种方法是将ConversationItem类子类化,以区分两种不同类型的项目。)

添加一个新的if case以检查标志是true还是false。但是,对于这两种情况,请不要忘记检查convertView是否为空,并在需要时膨胀正确的布局文件。

请注意,如果convertView不为空,则意味着将重新使用已经膨胀的视图。