Загрузить другую модель чата для другого элемента в recycleView
Я присоединяю эту модель чата к действию модели чата "По элементу клика"
когда я нажимаю на какое-либо cardView, оно открывает ту же модель чата для всех представлений карт, как я могу сделать разные сообщения чата "сообщениями" для каждого представления в recycleView?
Активность каждого клика слушателя в режиме рециркуляции
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);
}
Метод OnClick
@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;
}
}
1 ответ
Вы можете указать адаптер и менеджер раскладки, если хотите использовать виджет 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
Виджет был сначала добавлен в макет, получил дескриптор объекта, подключил его к менеджеру макета и подключил адаптер для отображения данных. Пожалуйста, проверьте документацию для получения дополнительной информации.
И вы можете также проверить следующие ссылки для получения дополнительной информации: