【问题标题】:How to inform recyclerview adapter of new item inserted into data如何通知recyclerview适配器插入数据的新项目
【发布时间】:2017-05-05 11:31:52
【问题描述】:

我知道使用了 notifyItemInserted(position),但在我看到的大多数示例中,它都是在 Click Listeners 的帮助下触发的。

但就我而言,我希望适配器知道更改并在按下另一个活动中的按钮时更新其视图。

我怎样才能做到这一点?

考虑以下示例场景: 1) 应用以 Activity A 开始

2) Activity A 包含recyclerview

3) 由于当前数据为空,recyclerview 中没有显示任何项目

4) 我不知何故进入了活动 B

4) 我更新了数据并按下了按钮

5) 随着新数据的出现,recyclerview 现在拥有一个包含更新数据的视图

【问题讨论】:

  • 考虑 SwipeRefreshLayout??
  • 您可以在活动 B 中将数据存储在模型中,现在又回到您的适配器中,您可以使用 swiperefreshlayout 并实现这些方法,notifyDataSetChanged() 或 notifyItemChanged(int) 或 notifyItemRangeChanged(int , int) 根据您的需要。参考这个link
  • 不,那行不通。我希望当我在活动 B 中按下按钮时出现 RW 中的新视图。像 Person 这样的东西填充表单字段并提交,然后在活动 A 的 recyclerview 中找到该数据
  • 重点是当我在活动 B 中按下按钮时,适配器如何自动通知数据更新
  • 尝试在 Activity A 中使用静态适配器,并使用 mAdapter.notifyDataSetChanged() 处理 Activity B 中的按钮单击侦听器事件或根据您的需要实现逻辑:仅将数据集或数据集中的特定项作为整个。

标签: android onclicklistener android-recyclerview


【解决方案1】:
  1. 使用 startActivityForResult 意图打开活动 B
  2. 带着你的数据从活动 B 回来
  3. 在 Activity A onActivityResult 中更新您的数据并通知您的适配器

【讨论】:

    【解决方案2】:

    如果适合您,请创建一个您想要更新 RecyclerView 的数据模型的 List 全局实例。

    List<DataModel> dataModelList = new ArrayList<>();
    

    您可以在扩展 Application 类的类中或您想要的其他地方执行此操作。

    现在在ActivityA

    public class ActivityA extends AppCompatActivity {
        YourAdapter adapter;
        RecyclerView recyclerView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    
        adapter = new YourAdapter(YourClassWhereYouPutDataModelList.dataModelList)
        recyclerView.setAdapter(adapter);
    
    
        @Override
        protected void onResume() {
            super.onResume();
            adapter.notifyDataSetChanged();
        }
    }
    

    现在在您的ActivityB

    public class ActivityA extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //your code to get value
                    YourClassWhereYouPutDataModelList.dataModelList.add(YourValue);
                    //Now it's up to you, either finish it using finish() or continue working
                    //Whenever you go to ActivityA, RecyclerView will be updated
                }
            });
        }
    }
    

    【讨论】:

    • 感谢 waqas 和大家
    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多