活动恢复后更新RecyclerView?

时间:2016-07-04 10:49:07

标签: android android-recyclerview material-design

我有QuestionActivity我在RecyclerView中显示了问题列表。

我在工具栏中有两个动作

  1. 转到downloadsFile活动。

  2. 转到最喜欢的活动。

  3. 每件事情都可以,但当我点击其中一项操作并返回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();
            }
        }
    }
    

    感谢。

3 个答案:

答案 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);
    }