Как перезапустить адаптер - PullRequest
0 голосов
/ 20 октября 2018

Код

    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>

1 Ответ

0 голосов
/ 20 октября 2018

не нужно устанавливать усиление адаптера и снова, просто сообщите адаптеру, когда значение было изменено.

        if(messagesList != null && messagesList.size() > 0){
            mAdapter = new MessagesAdapter(messagesList);
            mRListView.setAdapter(mAdapter);
        }

, если вручную обновите адаптер

        if(messagesList != null && messagesList.size() > 0){
            new Handler().postDelayed(new Runnable() {
                   public void run() {
                   messagesList.get(0).Seen = true;
                   mAdapter.notifyDataSetChanged();
            }
          }, 5000);
        }
...