Обновите адаптер recyclerView без прокрутки вверх

Я пытаюсь обновить свой адаптер после добавления в него некоторых данных, но он не обновляется, когда я переключаюсь через другие действия и возвращаюсь, адаптер на этот раз обновился, мой код:

    void updateAdapter(){
    adapter.setData(getData());
    adapter.notifyDataSetChanged();
    Log.d("TAG"," DATA SIZE AFTER UPDATE : "+getData().size() +" items : "+adapter.getItemCount());

}

мой адаптер:

    private void createAdapter(final RecyclerView recyclerView , final List<Information> data) {
    List<Information> content = new ArrayList<>();

    Log.d("TAG","createAdapter Called");

    final int[] currentRowPosition = {0};
    content = data;
    final List<Information> finalContent = content;
     adapter = new ParallaxRecyclerAdapter<Information>(finalContent) {

/// my onBindViewHolder
        @Override
        public void onBindViewHolderImpl(final RecyclerView.ViewHolder viewHolder, final ParallaxRecyclerAdapter<Information> adapter, final int i) {


            currentRowPosition[0] = i;

            if ( i <= finalContent.size() -1 ){

                ((ViewHolder) viewHolder).linearLayout.setVisibility(View.GONE);

            final Information current = finalContent.get(i);

            ((ViewHolder) viewHolder).DESCRIPTION.setText(current.description);

        }else {

                 // this is my loadMore button which stays at the last row of recyclerView 
                ((ViewHolder) viewHolder).setIsRecyclable(false);
                ((ViewHolder) viewHolder).linearLayout.setVisibility(View.VISIBLE);
                ((ViewHolder) viewHolder).itemView.getLayoutParams().height = 100;


                ((ViewHolder) viewHolder).LOADMORE.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        fetchNext();
                    }
                });

            }

        }
//my on create View Holder
        @Override
        public RecyclerView.ViewHolder onCreateViewHolderImpl(ViewGroup viewGroup, final ParallaxRecyclerAdapter<Information> adapter, int i) {

            return  new ViewHolder(getActivity().getLayoutInflater().inflate(R.layout.custom_row, viewGroup, false));

        }

        @Override
        public int getItemCountImpl(ParallaxRecyclerAdapter<Information> adapter) {
            return finalContent.size()+1;
        }
    });
// adding header to recyclerView  
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    View header = getActivity().getLayoutInflater().inflate(R.layout.header, recyclerView, false);

    headerImageView =  (ImageView) header.findViewById(R.id.headerImageView);
    //setting CoverImage

    adapter.setParallaxHeader(header, recyclerView);

    adapter.setData(content);
    recyclerView.setAdapter(adapter);

}

любая идея, как я могу добавлять новые элементы с обновлением в реальном времени на моем RecyclerView ?? любое руководство будет мне очень полезно


person remy boys    schedule 08.07.2016    source источник
comment
Как вы добавляете новые данные? в отдельную деятельность? Не могли бы вы также добавить свой код для активности, в которой размещается recyclerView   -  person Marat    schedule 08.07.2016
comment
да, в той же деятельности, updateAdapter - это то место, где я добавляю новые данные @Marat   -  person remy boys    schedule 08.07.2016
comment
Вместо обновления всего recylceView вы можете просто обновить один элемент, см. Как сделать обновить / обновить конкретный элемент в RecyclerView.   -  person Janki Gadhiya    schedule 08.07.2016


Ответы (3)


Я предполагаю, что когда вы запускаете Activity (который имеет RecyclerView) в первый раз, он правильно загружает все из adapter.

Но когда вы переходите на другой activities, который изменит элементы на ваш adapter и вернетесь к вашему Activity, в котором есть RecyclerView, вы не сможете получить правильную обновленную информацию, поскольку adapter не обновляется.

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

onResume(){
  if(adapter != null){
     adapter.notifyDataSetChanged();
   }
}

Пожалуйста, проверьте жизненный цикл Activity

введите здесь описание изображения

Пример: это не решает напрямую вашу проблему, но поможет вам понять, когда вы вернетесь к activity, вам следует обновить adapter.

Существует NoteListActivity, со ListView в нем, вы можете добавлять или редактировать элементы адаптера в нем в NoteEditActivity, и как только вы вернетесь, вам нужно будет обновить adapter в activity, где у вас listview

person Pankaj Nimgade    schedule 08.07.2016
comment
Спасибо за решение, это сэкономило мне время! - person hetsgandhi; 17.02.2021

Adapter.class

public void add(List<Information> informations){
try{
finalContent.addAll(informations);
}catch(Exception e){
e.printstacktrace();
}
notifyDataSetChanged();
}
person Narendra Sorathiya    schedule 08.07.2016
comment
что здесь контент? @narendra ?? а как насчет использования adapter.addItem(item , position )? - person remy boys; 08.07.2016
comment
вызовите эту функцию из Activity, чтобы добавить список информации в список. - person Narendra Sorathiya; 08.07.2016
comment
эта функция добавит данные в последний из вашего списка - person Narendra Sorathiya; 08.07.2016
comment
хорошо, это именно то, что я хочу, добавить наконец элемент, и я устал от вашего кода, но что здесь содержимого ??? - person remy boys; 08.07.2016
comment
вы устанавливаете listData как finalContent в своем адаптере. Я просто использовал это finalContents ... см. Мой отредактированный ответ ... - person Narendra Sorathiya; 08.07.2016
comment
получил или все еще нет? - person Narendra Sorathiya; 08.07.2016
comment
ну, у меня все заработало, большое спасибо за ваши усилия :) - person remy boys; 08.07.2016

ну я закончил с этим:

   int offset =   adapter.getItemCount();
    for(int l=0; l<= 4 ; l++){ 

        Log.d("TAG","getData : "+getData().size());
        if ((offset - 2) + l < getData().size()){

            adapter.addItem(getData().get((offset - 2 ) + l) , adapter.getItemCount() - 2);
            adapter.notifyDataSetChanged();

        }
    }

мне нужно было adapter.addItem(item , position) и adapter.notifyDataSetChanged(); в приведенном выше примере загружается 5 изображений за раз

person remy boys    schedule 08.07.2016