我有QuestionActivity
我在RecyclerView
中显示了问题列表。
我在工具栏中有两个动作
转到downloadsFile活动。
转到最喜欢的活动。
每件事情都可以,但当我点击其中一项操作并返回QuestionActivity
时,RecyclerView
无法更新。
所以我需要覆盖OnResume
方法。我的问题是,如何在RecyclerView
方法中更新onResume
。
AdapterRecyclerQuestion
代码:
public class AdapterRecyclerQuestion extends RecyclerView.Adapter<AdapterRecyclerQuestion.ViewHolder> {
private Context context;
private ArrayList<ModelQuestion> questionha;
private int lastd;
////////////////////////////////////////////////////////////
//================== Constructor =========================
////////////////////////////////////////////////////////////
public AdapterRecyclerQuestion(Context context, ArrayList<ModelQuestion> questionha) {
this.context = context;
this.questionha = questionha;
}
////////////////////////////////////////////////////////////
//================== view holder =========================
////////////////////////////////////////////////////////////
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView txtTitle;
private TextView txtDesc;
private TextView txtCntDown;
private Button btnDownload;
private ImageView imgAddFav;
private ProgressBar prgDownload;
////////////////////////////////////////////////////////////
//================== View holder constructor ==============
////////////////////////////////////////////////////////////
public ViewHolder(View itemView) {
super(itemView);
txtTitle = (TextView) itemView.findViewById(R.id.txt_title_question);
txtDesc = (TextView) itemView.findViewById(R.id.txt_desc_question);
txtCntDown = (TextView) itemView.findViewById(R.id.txt_cnt_down_question_dy);
btnDownload = (Button) itemView.findViewById(R.id.btn_down_question);
imgAddFav = (ImageView) itemView.findViewById(R.id.img_add_to_fav);
prgDownload = (ProgressBar) itemView.findViewById(R.id.prgDownload);
}
}
////////////////////////////////////////////////////////////
//================== on create view holder ================
////////////////////////////////////////////////////////////
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.question_row, parent, false);
return new ViewHolder(view);
}
////////////////////////////////////////////////////////////
//================== on bind view holder =================
////////////////////////////////////////////////////////////
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
QuestionDatabaseAdapter questionDatabaseAdapter = new QuestionDatabaseAdapter(holder.itemView.getContext());
holder.txtTitle.setText(questionha.get(position).getQuestionTitle());
holder.txtDesc.setText(questionha.get(position).getQuestionDesc());
holder.txtCntDown.setText(questionha.get(position).getQuestionDownCnt());
////////////////////////////////////////////////////////////
//================== Favorite checking ====================
////////////////////////////////////////////////////////////
boolean isFavorite = questionDatabaseAdapter.isQuestionFavorite(questionha.get(position).getQuestionId());
if (isFavorite)
{
holder.imgAddFav.setImageResource(R.drawable.ic_favorite_red_700_24dp);
} else
{
holder.imgAddFav.setImageResource(R.drawable.ic_favorite_border_red_a700_24dp);
}
////////////////////////////////////////////////////////////
//================== img add fav listener =================
////////////////////////////////////////////////////////////
holder.imgAddFav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
QuestionDatabaseAdapter databaseAdapter = new QuestionDatabaseAdapter(v.getContext());
boolean isFav = databaseAdapter.isQuestionFavorite(questionha.get(position).getQuestionId());
if (!isFav) {
Toast.makeText(v.getContext(), "به لیست علاقه مندی ها اضافه شد", Toast.LENGTH_SHORT).show();
holder.imgAddFav.setImageResource(R.drawable.ic_favorite_red_700_24dp);
ModelQuestion question = new ModelQuestion();
question.setQuestionId(questionha.get(position).getQuestionId());
question.setQuestionTitle(questionha.get(position).getQuestionTitle());
question.setQuestionDesc(questionha.get(position).getQuestionDesc());
question.setQuestionDownLink(questionha.get(position).getQuestionDownLink());
question.setQuestionDownFileName(questionha.get(position).getQuestionDownFileName());
databaseAdapter.saveQuestion(question);
} else {
Toast.makeText(v.getContext(), "از لیست علاقه مندی ها پاک شد", Toast.LENGTH_SHORT).show();
holder.imgAddFav.setImageResource(R.drawable.ic_favorite_border_red_a700_24dp);
databaseAdapter.deleteQuestion(questionha.get(position).getQuestionId());
}
}
}
);
}
////////////////////////////////////////////////////////////
//================== get item count method ================
////////////////////////////////////////////////////////////
@Override
public int getItemCount() {
if (questionha.size() == 0) {
return 0;
} else {
return questionha.size();
}
}
}
感谢。
答案 0 :(得分:1)
Loaders
最适合用于要在UI上通知和反映所有数据库更改的目的。
如果您正在从其他两个活动中对数据库进行一些更改,并希望在QuestionActivity上更新UI,只需创建一个加载器并在onResume()中启动它。
通过此链接实现加载程序: http://www.grokkingandroid.com/using-loaders-in-android/
答案 1 :(得分:0)
你可以试试这个。
在适配器中为ArrayList<ModelQuestion> questionha;
创建一个setter。
public void setData(ArrayList<ModelQuestion> data){
questionha=data;
notifyDataSetChanged();
}
使用新数据
在你的onResume()中调用它如果您知道哪个位置发生了变化等,请记得致电notifyDataSetChanged();
或特定notifiyItemChangedAt(pos)
等。您可以选择 - https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html
答案 2 :(得分:0)
感谢Anoop M,我只是为我编写了解决方案。 我在QuestionActivity中编写此代码。
////////////////////////////////////////////////////////////
//================== on Resume ===========
////////////////////////////////////////////////////////////
@Override
protected void onResume() {
super.onResume();
adapterRecyclerQuestion.notifyDataSetChanged();
recyclerQuestion.setAdapter(adapterRecyclerQuestion);
}