2016-07-04 3 views
0

У меня есть QuestionActivity Были ли я показываю список вопросов в RecyclerView.Обновление RecyclerView при возобновлении активности?

У меня есть два действия в панели инструментов

  1. Перейти к downloadedFile деятельности.

  2. Перейти к любимому занятию.

Каждая вещь в порядке, но когда я ударил одного из того, что действия и вернуться к QuestionActivityRecyclerView не может обновляться.

Так что мне нужно переопределить 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

Добро пожаловать в #SO. Ну, что вы подразумевали под ** Он не может перезапустить **? –

+0

@kiana проверяет изменения вашего арраиста или заполняет его новыми данными и делает 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 подходит для таких целей, где вы хотите, чтобы все изменения в базе данных были уведомлены и отражены в пользовательском интерфейсе.

Если вы делаете некоторые изменения в базе данных из других двух действий и хотите, чтобы пользовательский интерфейс обновлялся в QuestionActivity, просто создайте загрузчик и запустите его в onResume().

Пройдите по этой ссылке, чтобы реализовать загрузчик: http://www.grokkingandroid.com/using-loaders-in-android/

0

Благодаря Anoop М, я просто пишу работу решение для меня. Я пишу этот код в QuestionActivity.

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

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

Это не правильный путь кьяна. Не заставляйте адаптер обновлять свои данные, если вам это действительно не нужно. проверьте перед действием. обновляется, только если элемент изменяется. код, который вы написали, обновит ваше представление в каждом резюме. Скажем, если ваше приложение переходит в фоновый режим с того же экрана, тогда, когда он появится на переднем плане, он обновит ваше представление. tat совершенно избыточно. –

+1

Каков ваш совет? – kiana

+0

Когда вы подключите адаптер. Вы заставляете просмотр recycler обновляться. Поэтому вам нужно отредактировать данные и уведомить адаптер или установить адаптер. Но не для обоев: – IgniteCoders

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

Возможно, вам будет полезно пояснить код –

Смежные вопросы