当前位置: 首页 > 知识库问答 >
问题:

这是将MVVM结构与ViewModel和RecyclerView结合使用的正确方法吗?

漆雕修德
2023-03-14

所以我有一个包含两个片段、一个存储库和一个ViewModel类的活动,因为我遵循Android开发人员的指南来使用MVVM结构。到目前为止,它似乎是有效的,但我不确定在实现方面是否遵循了良好的实践。到目前为止,它看起来是这样的:

存储库类:

public class MyRepository{

...
    private MutableLiveData<ArrayList<Book>> bookList;

    public MyRepository(){
        bookList= new MutableLiveData<>();
        getBookList(); //method that uses retrofit to fill bookList, since it's empty at this point       

    }
...
}

ViewModel类:

public class BookViewModel extends ViewModel {
    private MyRepository repository;
    private LiveData<ArrayList<Book>> bookList;

    public void init(){
        repository = new MyRepository();
        bookList = repository.getBookList();
    };

    public LiveData<ArrayList<Book>>  getBookList() {
            if (bookList== null) {
                bookList= new MutableLiveData<>();
            }
        return bookList;
    }

显示图书列表的回收器视图:

public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerView.MyViewHolder> {

    Context context;
    ArrayList<Book> bookList;

    public MyRecyclerView(Context context) {
        context = context;
        bookList =  new ArrayList<>();
    }

    public void setList(ArrayList<Book> list){
        bookList= list;
        notifyDataSetChanged();
    }
...
}

片段1

public class Fragment1 extends Fragment {
....
     @Nullable
    @Override
    public View onCreateView(...) {

        ....

        recyclerview_adapter = new AdapterRecyclerView(Context);
        myRecyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
        myRecyclerView.setLayoutManager(new LinearLayoutManager((getActivity())));
        myRecyclerView.setAdapter(recyclerview_adapter);

      viewModel.getbookList().observe(getViewLifecycleOwner(), new Observer<ArrayList<Producto>>() {
            @Override
            public void onChanged(ArrayList<Producto> books) { 
                    recyclerview_adapter.setList(viewModel.getbookList().getValue());
            }
        });

        return view;
    }

...
}

问题:

1) 我用对了吗?我应该在onActivityCreated()或其他地方使用viewModel对象来防止任何错误吗?

2)我应该在每个片段中使用viewModel的实例,还是应该在包含它们的活动中使用它,然后通过参数将其传递给每个片段?

3)第一次调用init()(获取数据库中所有书籍的方法)的正确位置在哪里,这样用户在打开app时就看到了存储在数据库中的书单?

4) ArrayList


共有1个答案

宫亦
2023-03-14
  1. 观察片段中创建的视图中的视图模型

原因-

原因-

原因-

原因-

 类似资料:
  • 问题内容: 我能够使用三个链接来组合一个简化的完整History.js示例,以从整个页面加载内容片段,而无需更新页面和更新浏览器历史记录。 这是相关的代码段- 完整的工作示例在此处http://jsfiddle.net/PT7qx/show 我想知道这是否正确。以前的版本可以使用#url绑定到事件。我没有看到使用此最新版本将事件绑定到url的任何示例,因此我使用了.on()click事件来调用Hi

  • 在我的应用程序中,我使用ViewModels为视图提供数据,数据存储库为viewmodel提供数据,并处理与数据源(如数据库、internet API和首选项)的通信。 现在android使用特殊的片段来处理设置。这些特殊片段通过直接写入SharedPreferences来处理设置数据。因此它们不符合MVVM体系结构。我还从API中读取数据,从中提取一些初始设置数据并将其保存在自己的Prefere

  • 我想尝试将以下两种方法合二为一: 第一个方法构造一个映射,其中键是<code>String</code>,值是<code<ArrayList</code>。 我想尝试添加第二条信息,即简单的错误消息(方法2)。HashMap不够复杂,无法保存这些信息,但我喜欢它只接受唯一值的方式,而且很容易迭代和传递。 任何建议非常感谢:)

  • 本文向大家介绍javascript的replace方法结合正则使用实例总结,包括了javascript的replace方法结合正则使用实例总结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了javascript的replace方法结合正则使用方法。分享给大家供大家参考,具体如下: replace()方法用于在字符串中用一些字符替换另一些字符,或者替换一个正则表达式匹配的字符串 例子一:直接

  • 问题内容: 我一直在用 转换: 到: 我可以使用PIVOT语句接近此输出,但是我不确定如何获取TOTAL行/列? 给出: 我猜我需要将ROLLUP放入某个子查询中的某个地方…? 问题答案: 您没有发布表架构,所以我尝试推断它。我从您提供的输入开始(请参阅最里面的注释),因此您应该能够将其调整为实际的模式。我增加了一位没有任何文档的作者,因为我认为您希望在最终报告的输出中看到那些作者。排除那些作者是

  • 问题内容: 我在SO上发现了其他几个有关JavaMail API和通过SMTP服务器发送邮件的问题,但是没有一个使用TLS安全性进行讨论。我正在尝试使用JavaMail通过我的工作SMTP邮件服务器向我发送状态更新,但是它需要TLS,而且我在网上找不到任何有关如何使用JavaMail访问需要TLS加密的SMTP服务器的示例。有人能帮忙吗? 问题答案: 实际上,我们的产品中确实有一些通知代码,如果有