java - 在不滚动到顶部的情况下更新 recyclerView 适配器

标签 java android android-adapter

我在添加一些数据后尝试更新我的适配器,但它没有更新,当我切换其他 Activity 并返回时,这次我的代码更新了适配器:

    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 上添加实时更新的新项目吗??任何指导都会对我很有帮助

最佳答案

我假设当您第一次运行 Activity(它有 RecyclerView)时,它会正确地从 adapter 加载所有内容。

但是,当您更改为其他 activity 时,这会将项目更改为您的 adapter 并返回到具有 RecyclerView 的 Activity 因为 adapter 没有更新,它无法获得正确的更新信息。

这可能是因为当您的 Activity 在 onResume() 中恢复时您没有刷新适配器,像这样的东西。您可能需要根据需要对 onResume 方法进行其他更改,

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

请检查Activity的生​​命周期

enter image description here

例子: 这不会直接解决您的问题,但可以帮助您了解当您返回 activity 时您应该刷新 adapter

有一个NoteListActivity ,其中包含 ListView,您可以在 NoteEditActivity 中向其中的 Adapter 添加或编辑项目一旦你回来,你必须在你有你的 listview

activity 中刷新 adapter

关于java - 在不滚动到顶部的情况下更新 recyclerView 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262560/

相关文章:

android - RecyclerView 适配器 notifyDataSetChanged 不起作用

java - 使用java在Excel工作表中的列之间交换

android - 如何在触摸模式下设置可聚焦的 LinearLayout?

java - 基于 HTTP 请求为 Android 开发 RSS 阅读器的更好方法是什么?

android - 单击按钮从自定义 ListView 中删除项目

android - ListView 中的不同行布局

java - Java 中的 RFC822 时区解析

Java 方法与引用性能

java - 路径转换绑定(bind)

android - 以 UTF-8 编码来自 ContentResolver 的 SMS 消息正文