Android 根据Firestore中的值,使用if-else语句更改RecyclerView中的TextView

Android 根据Firestore中的值,使用if-else语句更改RecyclerView中的TextView,android,firebase,android-recyclerview,google-cloud-firestore,Android,Firebase,Android Recyclerview,Google Cloud Firestore,我正在开发一个游戏,当前用户可以在一个RecyclerView中看到他当前的所有游戏(见图)。为此,我正在使用Firestore用户界面,我想将文本视图更改为“播放”或“等待”,这取决于当前用户必须播放还是对手必须播放。为此,我在文档中做了一个字段“turn”,其中RecycleServiceAdapter检索其值,并为其提供当前玩家或对手的UID值(取决于谁必须玩) 因此,当当前用户必须玩游戏时,他应该在RecyclerView项中看到文本视图中的“玩”,而对手必须看到“等待”(见图)。为了获

我正在开发一个游戏,当前用户可以在一个RecyclerView中看到他当前的所有游戏(见图)。为此,我正在使用Firestore用户界面,我想将文本视图更改为“播放”或“等待”,这取决于当前用户必须播放还是对手必须播放。为此,我在文档中做了一个字段“turn”,其中RecycleServiceAdapter检索其值,并为其提供当前玩家或对手的UID值(取决于谁必须玩)

因此,当当前用户必须玩游戏时,他应该在RecyclerView项中看到文本视图中的“玩”,而对手必须看到“等待”(见图)。为了获得所需的结果,我想实现一个if-else语句,但不幸的是if语句中的
textViewTurn.getText().toString()
没有值,但当我将值作为意图发送到下一个活动时,它有一个值,因此if-else语句不起作用。如何在
CurrentGamesHolder
中获取此文本视图的值?我应该在RecyclerAdapter的其他地方使用if-else语句吗

编辑: 现在,我将if-else语句移动到
onBindViewHolder
中,其中
mTurn
uid
都有一个值,但该方法仍然不起作用。这意味着当我登录到播放器1的帐户时,
textViewPlay
显示与播放器2相同的“等待”。在两个帐户中,
uid
的值是不同的,因此我实际上不知道两个帐户中的结果如何可能是相同的,因为根据if-else语句,它不应该是相同的

非常感谢您的帮助

这是我的RecycleServiceAdapter:

public class CurrentGameAdapter extends FirestoreRecyclerAdapter<CurrentGames, CurrentGameAdapter.CurrentGamesHolder> {
    private OnItemClickListener listener;

    public CurrentGameAdapter(@NonNull FirestoreRecyclerOptions<CurrentGames> options) {
        super(options);

    }

    @Override
    protected void onBindViewHolder(@NonNull CurrentGamesHolder holder, int position, @NonNull CurrentGames model) {

        holder.textViewTurn.setText(model.getTurn());
        holder.textViewPlay.setText("");
           ...

        mTurn = model.getTurn();


        FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

        String mCurrentUser =currentUser.getUid();

        if (mTurn == mCurrentUser){
            holder.textViewPlay.setText("Play");
        }else if (mTurn != mCurrentUser){
            holder.textViewPlay.setText("Wait");
        }

    }

    @NonNull
    @Override
    public CurrentGamesHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_current_game,parent, false);
        return new CurrentGamesHolder(view);
    }

    class CurrentGamesHolder extends RecyclerView.ViewHolder {

        TextView textViewTurn, textViewPlay;

         ...


        public CurrentGamesHolder(@NonNull View itemView) {
            super(itemView);

            textViewPlay = itemView.findViewById(R.id.play_current_game);
            textViewTurn = itemView.findViewById(R.id.turn_current_game);
            textViewTurn.setVisibility(View.INVISIBLE);

            ...

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION && listener != null){
                        listener.onItemClick(getSnapshots().getSnapshot(position),(position));
                        Intent i = new Intent (itemView.getContext(), PlayInterimResultMainActivity.class);
                        i.putExtra("turn", textViewTurn.getText().toString());
                        itemView.getContext().startActivity(i);
                    }

                }
            });
        }
    }

    public interface OnItemClickListener{
        void onItemClick (DocumentSnapshot documentSnapshot, int position);

    }

    public void setOnItemClickListener(OnItemClickListener listener){
        this.listener = listener;
    }
}
公共类CurrentGameAdapter扩展FirestoreRecyclerAdapter{
私人监听;
public CurrentGameAdapter(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull CurrentGamesHolder,int位置,@NonNull CurrentGames模型){
holder.textViewTurn.setText(model.getTurn());
holder.textViewPlay.setText(“”);
...
mTurn=model.getTurn();
FirebaseUser currentUser=FirebaseAuth.getInstance().getCurrentUser();
字符串mCurrentUser=currentUser.getUid();
if(mTurn==mCurrentUser){
holder.textViewPlay.setText(“播放”);
}else if(mTurn!=mCurrentUser){
holder.textViewPlay.setText(“等待”);
}
}
@非空
@凌驾
public CurrentGamesHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.listitem\u current\u game,parent,false);
返回新的CurrentGamesHolder(视图);
}
类CurrentGamesHolder扩展了RecyclerView.ViewHolder{
TextView textViewTurn,textViewPlay;
...
public-CurrentGamesHolder(@NonNull-View-itemView){
超级(项目视图);
textViewPlay=itemView.findViewById(R.id.play\u current\u game);
textViewTurn=itemView.findViewById(R.id.turn\u当前游戏);
textViewTurn.setVisibility(View.INVISIBLE);
...
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
if(position!=RecyclerView.NO_position&&listener!=null){
onItemClick(getSnapshots().getSnapshot(position),(position));
Intent i=新的Intent(itemView.getContext(),PlayInterimResultMainActivity.class);
i、 putExtra(“turn”,textViewTurn.getText().toString());
itemView.getContext().startActivity(i);
}
}
});
}
}
公共接口侦听器{
void onItemClick(DocumentSnapshot DocumentSnapshot,int位置);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.listener=listener;
}
}
第一张图片是玩家在必须比赛时在其回收视图中看到的,第二张图片是对手看到的:


RecyclerView仅为适合屏幕的视图创建视图(通过调用构造函数),然后根据适合屏幕的对象(使用onBindViewHolder方法)使用数据填充视图


if-else块位于ViewHolder构造函数中,此时,还没有绑定它。此时,TextView中的文本就是放置在xml文件中的文本,这就是为什么它是空的。if-else语句应该在onBindViewHolder方法中。

经过长时间的尝试,我找到了解决方案。我使用了==运算符,它比较两个对象的引用,而不是字符串。要比较字符串,我必须使用
.equals()
。我很惊讶,因为Android Studio向我显示“字符串是使用“==”而不是“equals()”进行比较的,所以这可能有一个bug

下面是正确的if-else语句:

if (mTurn.equals(uid)){
            holder.textViewPlay.setText("Wait");
        }else {
            holder.textViewPlay.setText("Play");
        }

是的,我注意到了这一点,但我不知道如何在onBindViewHolder中实现if-else语句。(请参阅我更新的问题)