在回收视图中为不同的项目加载不同的聊天模型



我将此聊天模型附加到"项目单击聊天模型"的活动

当我单击某些卡片视图时,它会为所有卡片视图打开相同的聊天模型如何在回收视图中为每个视图制作不同的聊天数据"消息"?

回收视图中每个单击侦听器的活动

 if(FirebaseAuth.getInstance().getCurrentUser() == null) {
        // Start sign in/sign up activity
        startActivityForResult(
                AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .build(),
                SIGN_IN_REQUEST_CODE
        );
    } else {
        // User is already signed in. Therefore, display
        // a welcome Toast
        Toast.makeText(this,
                "Welcome " + FirebaseAuth.getInstance()
                        .getCurrentUser()
                        .getDisplayName(),
                Toast.LENGTH_LONG)
                .show();
        // Load chat room contents
        displayChatMessages();
    }

    FloatingActionButton fab =
            (FloatingActionButton)findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText input = (EditText)findViewById(R.id.input);
            // Read the input field and push a new instance
            // of ChatMessage to the Firebase database
            FirebaseDatabase.getInstance()
                    .getReference()
                    .push()
                    .setValue(new ChatMessage1(input.getText().toString(),
                            FirebaseAuth.getInstance()
                                    .getCurrentUser()
                                    .getDisplayName())
                    );
            // Clear the input
            input.setText("");
        }
    });
    displayChatMessages();}

private void displayChatMessages() {
    ListView listOfMessages = (ListView)findViewById(R.id.list_of_messages);
    adapter = new FirebaseListAdapter<ChatMessage1>(this, ChatMessage1.class,
            R.layout.messagee, FirebaseDatabase.getInstance().getReference()) {
        @Override
        protected void populateView(View v, ChatMessage1 model, int position) {
            // Get references to the views of message.xml
            TextView messageText = (TextView)v.findViewById(R.id.message_text);
            TextView messageUser = (TextView)v.findViewById(R.id.message_user);
            TextView messageTime = (TextView)v.findViewById(R.id.message_time);
            // Set their text
            messageText.setText(model.getMessageText());
            messageUser.setText(model.getMessageUser());
            // Format the date before showing it
            messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)",
                    model.getMessageTime()));
        }
    };
    listOfMessages.setAdapter(adapter);
}

点击方法

 @Override
    public void onClick(View v) {
        int position=getAdapterPosition();
        PushBotsModel push =  pushBotsModels.get(position);
        Log.i(TAG, "User received notification with Message: " + push);
        Intent intent = new Intent(this.ctx, NotificationDetails.class);
        intent.putExtra("itemName",push.getMessage());
        intent.putExtra("authorr",push.getauthor());
        this.ctx.startActivity(intent);
    }
}

聊天模型

public class ChatMessage1 {
private String messageText;
private String messageUser;
private long messageTime;
public ChatMessage1(String messageText, String messageUser) {
    this.messageText = messageText;
    this.messageUser = messageUser;
    // Initialize to current time
    messageTime = new Date().getTime();
}
public ChatMessage1(){
}
public String getMessageText() {
    return messageText;
}
public void setMessageText(String messageText) {
    this.messageText = messageText;
}
public String getMessageUser() {
    return messageUser;
}
public void setMessageUser(String messageUser) {
    this.messageUser = messageUser;
}
public long getMessageTime() {
    return messageTime;
}
public void setMessageTime(long messageTime) {
    this.messageTime = messageTime;
}

}

如果要使用创建列表和卡片中所述的 RecyclerView 构件,则可能需要指定适配器和布局管理器。

此外,如本例所示,

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);
        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
} 

首先将RecyclerView小部件添加到布局中,获取对象的句柄,将其连接到布局管理器,并附加一个适配器以显示数据。有关详细信息,请查看文档。

而且,您可能还需要查看以下参考以获取其他见解:

  • 具有不同子布局的安卓回收器视图
  • 如何创建具有多种视图类型的回收器视图?

最新更新