不滚动到顶部更新recyclerView适配器

5
我正在尝试在适配器中添加数据后更新它,但是它没有更新。当我切换到其他活动并返回时,适配器得到了更新。这是我的代码:
    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上的新项目吗?任何指导都将对我有所帮助。


你是如何添加新数据的?是在单独的活动中吗?你能否提供包含recyclerView的活动代码? - Marat
在同一个活动中,updateAdapter 是我添加新数据的地方 @Marat - remy boys
不必刷新整个recylceView,您可以简单地刷新单个项目,请参见此处如何更新/刷新RecyclerView中的特定项 - Janki Gadhiya
3个回答

4

我假设当您首次运行具有RecyclerViewActivity时,它会正确地从adapter加载所有内容。

但是,当您切换到其他activities并更改项目以使其适用于您的adapter,然后返回到具有RecyclerViewActivity时,它无法获得正确的更新信息,因为adapter未更新。

这可能是因为在onResume()恢复活动时您没有刷新适配器,例如这样。您可能需要根据需要对onResume方法进行其他更改。

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

请检查Activity的生命周期。

enter image description here

例子: 这并没有直接解决你的问题,但是帮助你理解,当你回到activity时,你应该刷新adapter

有一个NoteListActivity,里面有一个ListView,你可以在NoteEditActivity中向Adapter中添加或编辑项目,当你回来时,你必须刷新adapter在你拥有listviewactivity中。


1

Adapter.class

public void add(List<Information> informations){
try{
finalContent.addAll(informations);
}catch(Exception e){
e.printstacktrace();
}
notifyDataSetChanged();
}

这里的内容是什么? @narendra ?? 而使用 adapter.addItem(item, position) 如何? - remy boys
从Activity中调用此函数以将信息列表添加到ListView中。 - Narendra Sorathiya
此函数将在您的列表末尾添加数据。 - Narendra Sorathiya
好的,这正是我想要的,将项目添加到最后,我尝试了你的代码,但这里是什么内容? - remy boys
你在适配器中将listData设置为finalContent。我只是使用了那个finalContent...看看我的编辑答案... - Narendra Sorathiya
显示剩余2条评论

0

最终我得到了这个:

   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张图片。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接