[英]RecyclerView doesn't refresh after Firebase update
I have a RecyclerView and for each item, you can start the EditActivity (for Result) to update your text with Firebase. 我有一个RecyclerView,对于每个项目,您都可以启动EditActivity(用于Result)以使用Firebase更新文本。
The problem is that when you come back to the RecyclerView, data is not refreshed 问题是,当您返回到RecyclerView时,不会刷新数据
Here's code from my adapter : 这是我的适配器中的代码:
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();
}
}
}
Here's code from my EditActivity : 这是我的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);
}
});
}
});
How to refresh the RecyclerView and setText with the new Text ? 如何使用新的Text刷新RecyclerView和setText?
I would be very grateful for your help :) 我将非常感谢您的帮助:)
There are few things you're doing wrong. 您做错的事情很少。
Pass the clickedItem position to EditActivity
to update it later on. 将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); } });
In EditActivity
, Save the position in a variable & Return it back with new text 在
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); } }); } });
override onActivityResult()
in your adaptor's parent 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); } } }
Define the updateItem
method inside adapter class 在适配器类中定义
updateItem
方法
public void updateItem(String newData, int index) { textList.set(index, newData); adapter.notifyItemChanged(index); }
Cheers :) 干杯:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.