Код
public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.MessageViewHolder>{
private List<MessagesHelper> mMessagesHelperList;
private DatabaseReference mDatabaseReference;
private FirebaseAuth mAuth;
private Handler handler = new Handler();
private Runnable runnable;
public MessagesAdapter(List<MessagesHelper> mMessagesHelperList)
{
this.mMessagesHelperList = mMessagesHelperList;
}
public class MessageViewHolder extends RecyclerView.ViewHolder{
public TextView messageText;
public MessageViewHolder(View view)
{
super(view);
messageText = (TextView)view.findViewById(R.id.message_text_layout);
}
}
@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_activity_chat,parent,false);
mAuth = FirebaseAuth.getInstance();
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
return new MessageViewHolder(V);
}
@Override
public void onBindViewHolder(final MessageViewHolder holder, int position) {
String current_user_id = mAuth.getInstance().getCurrentUser().getUid();
MessagesHelper messagesHelper = mMessagesHelperList.get(position);
String from_user = messagesHelper.getFrom();
final boolean Seen = messagesHelper.isSeen();
if (from_user != null && from_user.equals(current_user_id)) {
holder.messageText.setBackgroundColor(Color.BLUE);
holder.messageText.setTextColor(Color.WHITE);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.messageText.getLayoutParams();
params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.messageText.setLayoutParams(params);
if (Seen==false){
holder.messageText.setBackgroundColor(Color.BLUE);
}else{
holder.messageText.setBackgroundColor(Color.CYAN);
}
}else {
holder.messageText.setBackgroundColor(Color.GREEN);
holder.messageText.setTextColor(Color.BLACK);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.messageText.getLayoutParams();
params.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
holder.messageText.setLayoutParams(params);
}
holder.messageText.setText(messagesHelper.getMessage());
}
@Override
public int getItemCount() {
return mMessagesHelperList.size();
}
}
Как вы видите, цвет фона может меняться в зависимости от данных
Но в моей деятельности цвет не меняется, пока яперезапустите мою деятельность ... Я предполагаю, что это потому, что цвет устанавливается, когда запускается onCreate действия ..
Итак, я попробовал что-то вроде этого
messageList = (RecyclerView) findViewById(R.id.message_list);
mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
linearLayoutManager = new LinearLayoutManager(getApplicationContext());
mAdapter = new MessagesAdapter(messagesList);
messageList.setHasFixedSize(true);
messageList.setLayoutManager(linearLayoutManager);
messageList.setAdapter(mAdapter);
final Handler handlerr = new Handler();
int delay = 1000; //milliseconds
final int finalDelay1 = delay;
handlerr.postDelayed(new Runnable() {
public void run() {
messageList.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
handlerr.postDelayed(this, finalDelay1);
}
}, delay);
Но не сработало ...Как я могу сбросить адаптер каждую секунду или что-то о том, что он обновлен?или я должен вызывать oncreate каждый раз, чтобы он работал
Настоящая проблема с моим кодом заключается в том, что он работает, но если visible = false, а затем я запускаю активность, а затем visible становится истинным, его цвет сохраняется до перезапускаактивность ... Итак, я хочу, чтобы это изменилось без перезапуска, чтобы кто-то помог мне, пожалуйста ... Также данные находятся в базе данных, поэтому адаптер извлекает эти данные
Пользовательский Xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/message_single_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp">
<TextView
android:id="@+id/message_text_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@drawable/text_background2"
android:padding="10dp"
android:text="Textview"
android:textSize="15dp"
android:textColor="@color/black"/>
</RelativeLayout>