gpt4 book ai didi

java - Firebase 更新后 RecyclerView 不刷新

转载 作者:行者123 更新时间:2023-12-02 01:22:18 25 4
gpt4 key购买 nike

我有一个 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();
}
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);
}
});
}
});

如何使用新的 Text 刷新 RecyclerView 和 setText ?

我将非常感谢您的帮助:)

最佳答案

你做错的事情很少。

  1. 将 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);
    }
    });
  2. 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);
    }
    });
    }
    });
  3. 覆盖适配器父 Activity 中的 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);
    }
    }
    }
  4. 在适配器类中定义 updateItem 方法

    public void updateItem(String newData, int index)
    {
    textList.set(index, newData);
    adapter.notifyItemChanged(index);
    }

干杯:)

关于java - Firebase 更新后 RecyclerView 不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57468987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com