2016-07-04 4 views
0

私はQuestionActivityを持っていました。私はRecyclerViewの質問リストを示していました。アクティビティが再開したときにRecyclerViewを更新しますか?

私はdownloadedFile活動にツールバーに2つのアクション

  1. Go]を持っています。

  2. お気に入りのアクティビティに移動します。

すべてのものはOKですが、私はそのアクションのいずれかをヒットし、QuestionActivityRecyclerViewに戻ったときに更新されませんでした。

だから、OnResumeメソッドをオーバーライドする必要があります。私の質問は、どのように私はonResumeメソッドのRecyclerViewを更新することができますです。

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

は#SOへようこそ。まあ、あなたが言ったのは**再起動できません**。 –

+0

@kiana arraylistの変更を確認するか、新しいデータを入力してadapter.notifyDataSetChanged()を実行します。 – Nisarg

+0

onResume()メソッドでアダプタを設定(またはリセット)しようとしましたか? – wolfy

答えて

0

これを試すことができます。 ArrayList<ModelQuestion> questionha;のセッターをアダプターに作成します。新しいデータ

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

1

Loadersは、すべてのデータベースの変更を通知してUIに反映させる場合に最適です。

他の2つのアクティビティからデータベースを変更して、QuestionActivityでUIを更新したい場合は、単にローダーを作成してonResume()で起動してください。私はちょうど私のためのソリューションの仕事を書き、アヌープMへ http://www.grokkingandroid.com/using-loaders-in-android/

0

ありがとう:

はローダーを実装するには、このリンクを通過します。 私はQuestionActivityにこのコードを書いています。

//////////////////////////////////////////////////////////// 
    //================== on Resume =========== 
    //////////////////////////////////////////////////////////// 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     adapterRecyclerQuestion.notifyDataSetChanged(); 
     recyclerQuestion.setAdapter(adapterRecyclerQuestion); 
    } 
+2

これは正しい方法kianaではありません。本当に必要な場合を除き、アダプターにデータを強制的に更新させないでください。処置の前に確認してください。アイテムが変更された場合にのみ更新します。あなたが書いたコードはすべての履歴書であなたの意見を更新します。アプリが同じ画面からバックグラウンドに移動した場合、フォアグラウンドになるとビューが更新されます。 tatは完全に冗長です。 –

+1

あなたのアドバイスは何ですか? – kiana

+0

アダプタを使用するとき。あなたはリフレッシュするリサイクラービューを強制しています。したがって、データを編集してアダプターに通知するかアダプターに通知する必要があります。しかし、両方ともではない – IgniteCoders

-2
@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     Arraylist.clear(); 
     adapter = null; 
     recylerView = null; 
    } 
+2

あなたのコードの説明を追加するかもしれない –

関連する問題