为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase 更新后 RecyclerView 不刷新

Firebase 更新后 RecyclerView 不刷新

慕斯王 2023-06-04 15:37:42
我有一个 RecyclerView,对于每个项目,您可以启动 EditActivity(对于结果)以使用 Firebase 更新您的文本。问题是当你回到 RecyclerView 时,数据没有刷新这是我的适配器的代码:holder.editBtn.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Intent edit_intent = new Intent(holder.authorText.getContext(), EditActivity.class);                    edit_intent.putExtra("text", textList.get(position).getBody());                    edit_intent.putExtra("id", textList.get(position).textId);                    ((Activity) context).startActivityForResult(edit_intent, 1);                }            }); public void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == 1) {            if(resultCode == RESULT_OK){                notifyDataSetChanged();            }        }    }这是我的 EditActivity 中的代码:edit_btn.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        mProgress.setVisibility(View.VISIBLE);        edit_btn.setVisibility(View.INVISIBLE);        String new_text = edit_text.getText().toString();        mFirestore.collection("Text").document(text_id).update("body", new_text).addOnCompleteListener(new OnCompleteListener<Void>() {            @Override            public void onComplete(@NonNull Task<Void> task) {                if(task.isSuccessful()){                    Toast.makeText(EditActivity.this, R.string.changes, Toast.LENGTH_LONG).show();                    Intent intent = new Intent();                    intent.putExtra("newText", new_text);                    setResult(RESULT_OK, intent);                    finish();                }            }        });    }});如何用新的 Text 刷新 RecyclerView 和 setText ?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

你做错的事情很少。


将 clickedItem 位置传递给以EditActivity稍后更新它。


holder.editBtn.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            Intent edit_intent = new Intent(holder.authorText.getContext(), EditActivity.class);

            edit_intent.putExtra("text", textList.get(position).getBody());

            edit_intent.putExtra("id", textList.get(position).textId);

            edit_intent.putExtra("position", position);

            ((Activity) context).startActivityForResult(edit_intent, 1);

        }

    });

在 中EditActivity,将位置保存在变量中并用新文本返回


setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            mProgress.setVisibility(View.VISIBLE);

            edit_btn.setVisibility(View.INVISIBLE);

            String new_text = edit_text.getText().toString();

            mFirestore.collection("Text").document(text_id).update("body", new_text).addOnCompleteListener(new OnCompleteListener<Void>() {

                @Override

                public void onComplete(@NonNull Task<Void> task) {

                    if(task.isSuccessful()){

                        Toast.makeText(EditActivity.this, R.string.changes, Toast.LENGTH_LONG).show();

                        Intent intent = new Intent();

                        intent.putExtra("newText", new_text);

                        //Return the position s well

                        intent.putExtra("position", position);

                        setResult(RESULT_OK, intent);

                        finish();

                    }

                    else{

                        String error = task.getException().getMessage();

                        Toast.makeText(EditActivity.this, R.string.error + error, Toast.LENGTH_LONG).show();

                    }

                    mProgress.setVisibility(View.INVISIBLE);

                    edit_btn.setVisibility(View.VISIBLE);

                }

            });

        }

    });

onActivityResult()在适配器的父活动中覆盖


public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {

        if(resultCode == RESULT_OK){


          String newText = data.getStringExtra("newText");

          int itemPosition = data.getIntExtra("position");


          //Pass these values to adapter through `updateItem` method

            adapter.updateItem(newText, itemPosition);

        }

    }

}

updateItem在适配器类中定义方法


public void updateItem(String newData, int index)

{

  textList.set(index, newData);

  adapter.notifyItemChanged(index);

}

干杯 :)


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信