繁体   English   中英

如何添加和删除<object>从(和到)LiveData <list<object> &gt;?<div id="text_translate"><p> 我有一个用 LiveData&lt;List&gt; currentList 填充的 recyclerView。 我采用 Single&lt;List&gt; 并在 onSuccess 方法中使用 currentList.setValue(people) 添加人员(请参见下面的代码)。 但是当我打开应用程序时,recyclerView 中只有 1 个 object。 我的任务是: 1)当应用程序打开时,它必须将 4 人添加到 recyclerView(即 currentList); 2) 在 onSwipe 方法之后,它必须删除第一个并将 RoomDatabase 中的 1 个新随机添加到 currentList 的末尾。</p><p> 这意味着我需要将对象删除和添加到 LiveData&lt;List&gt; 的方法。 我怎样才能做到这一点? (ViewModel 代码如下)</p><pre> public class PersonViewModel extends AndroidViewModel { private PersonRepository mRepository; private CompositeDisposable composite = new CompositeDisposable(); private Single&lt;List&lt;Person&gt;&gt; mGuyWho; // это нада??? LOBNYA private Single&lt;Person&gt; mGuy; // PSKOV private MutableLiveData&lt;List&lt;Person&gt;&gt; currentList = new MutableLiveData&lt;&gt;(); public PersonViewModel(@NonNull Application application) { super(application); mRepository = new PersonRepository(application); mGuyWho = mRepository.getGuyWho(); //это нада?? LOBNYA mGuy = mRepository.getGuy(); // PSKOV mGuyWho.subscribeOn(Schedulers.io()) // LOBNYA nachalo.observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver&lt;List&lt;Person&gt;&gt;() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe(Disposable d): called"); composite.add(d); } @Override public void onSuccess(List&lt;Person&gt; people) { Log.d(TAG, "onSuccess: called"); currentList.setValue(people); // here I pass List to LiveData&lt;List&gt; } @Override public void onError(Throwable e) { Log.d(TAG, "onError: called"); Toast.makeText(application, "NO DATA", Toast.LENGTH_SHORT).show(); } }); // LOBNYA konets mGuy.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver&lt;Person&gt;() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe(Disposable d): called"); composite.add(d); } @Override public void onSuccess(Person person) { Log.d(TAG, "onSuccess: called"); currentList.setValue(person); // there is an error, for I cannot bypass &lt;Person&gt; to LiveData&lt;List&lt;&gt;&gt; } @Override public void onError(Throwable e) { Log.d(TAG, "onError: called"); } }) } LiveData&lt;List&lt;Person&gt;&gt; getCurrentList() { return currentList; } };</pre> </div></list<object></object>

[英]how to add and delete <Object> from (and to) LiveData<List<Object>>?

我有一个用 LiveData<List> currentList 填充的 recyclerView。 我采用 Single<List> 并在 onSuccess 方法中使用 currentList.setValue(people) 添加人员(请参见下面的代码)。 但是当我打开应用程序时,recyclerView 中只有 1 个 object。 我的任务是: 1)当应用程序打开时,它必须将 4 人添加到 recyclerView(即 currentList); 2) 在 onSwipe 方法之后,它必须删除第一个并将 RoomDatabase 中的 1 个新随机添加到 currentList 的末尾。

这意味着我需要将对象删除和添加到 LiveData<List> 的方法。 我怎样才能做到这一点? (ViewModel 代码如下)

public class PersonViewModel extends AndroidViewModel {
    private PersonRepository mRepository;
    private CompositeDisposable composite = new CompositeDisposable();
    private Single<List<Person>> mGuyWho;     // это нада??? LOBNYA
    private Single<Person> mGuy;      // PSKOV
    private MutableLiveData<List<Person>> currentList = new MutableLiveData<>();
    public PersonViewModel(@NonNull Application application) {
        super(application);
        mRepository = new PersonRepository(application);

        mGuyWho = mRepository.getGuyWho(); //это нада?? LOBNYA
        mGuy = mRepository.getGuy(); // PSKOV

        mGuyWho.subscribeOn(Schedulers.io())   // LOBNYA nachalo
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<List<Person>>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "onSubscribe(Disposable d): called");
                        composite.add(d);
                    }

                    @Override
                    public void onSuccess(List<Person> people) {
                        Log.d(TAG, "onSuccess: called");
                        currentList.setValue(people); // here I pass List to LiveData<List>
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError: called");
                        Toast.makeText(application, "NO DATA", Toast.LENGTH_SHORT).show();
                    }
                });  // LOBNYA konets

        mGuy.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<Person>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "onSubscribe(Disposable d): called");
                        composite.add(d);
                    }

                    @Override
                    public void onSuccess(Person person) {
                        Log.d(TAG, "onSuccess: called");
                        currentList.setValue(person); // there is an error, for I cannot bypass <Person> to LiveData<List<>>
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError: called");
                    }
                })
        }
    LiveData<List<Person>> getCurrentList() {
        return currentList;
    }
};

您的LiveDataList<Person> object 组成:

private MutableLiveData<List<Person>> currentList = new MutableLiveData<>();

在您的onSuccess()方法中,您尝试将Person object 传递给它。 您应该在其中传递mutableListOf(Person())以使其正常工作。 但是,这仍然不能解决您的问题。

您需要执行以下操作:

  1. 接收 ViewHolder 的onSwipe事件并在viewModel中调用remove方法。
  2. remove方法应通过删除元素来修改您的currentList 您可以将id传递给remove方法以使事情变得更容易。
  3. 因为currentListLiveData每个observer都会收到通知。
  4. 然后你需要从Room Database中获取随机条目。
  5. 将此随机条目添加到currentList 您可以为此使用 LiveData 的Transformations LiveData
  6. 再一次,因为currentListLiveData ,每个Observer都会收到通知。

如何将元素添加到 Object,List 的 hashmap<object><div id="text_translate"><p> 我有一个来自 dao 的列表,我想把这个列表放在一个 HashMap&gt; 中,我的列表可以包含一个服务,它有多个参数,比如 serviceId=3。 在我的最终 HashMap 中,结果如下所示: {Service 1=[100,A],Service 2=[101,A],Service 3=[Parameter[102,B],Parameter[103,B],Parameter[104,C]]} 。</p><pre> serviceId paramId type 1 100 A 2 101 A 3 102 B 3 103 B 3 104 C</pre><p> 服务.java</p><pre> private int id; //Getters+Setters</pre><p> 参数.java</p><pre> private int id; private String type; //Getters+Setters</pre><p> 测试.java</p><pre> List result = dao.getServiceParam(); HashMap&lt;Service,List&lt;Parameter&gt;&gt; mapList = new HashMap&lt;Service, List&lt;Parameter&gt;&gt;(); if(.result;isEmpty()) { for (int i=0. i&lt; result;size(). i++) { Object[] line = (Object[])result;get(i); if ((BigDecimal) line[0]!=null) { } } }</pre></div></object>

[英]How to add element to hashmap of Object,List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 SpringBoot 和 MongoDB 从 JSON 列表中删除 object 如何从Java列表中删除具有相同值的对象 带有 Room 和 LiveData 的 MVVM - 如何从 LiveData 获取列表 从链表中删除对象的方法 如何在另一个列表对象内添加对象 如何将List <Future <Object >>添加到Set <Object>? 如何将元素添加到 Object,List 的 hashmap<object><div id="text_translate"><p> 我有一个来自 dao 的列表,我想把这个列表放在一个 HashMap&gt; 中,我的列表可以包含一个服务,它有多个参数,比如 serviceId=3。 在我的最终 HashMap 中,结果如下所示: {Service 1=[100,A],Service 2=[101,A],Service 3=[Parameter[102,B],Parameter[103,B],Parameter[104,C]]} 。</p><pre> serviceId paramId type 1 100 A 2 101 A 3 102 B 3 103 B 3 104 C</pre><p> 服务.java</p><pre> private int id; //Getters+Setters</pre><p> 参数.java</p><pre> private int id; private String type; //Getters+Setters</pre><p> 测试.java</p><pre> List result = dao.getServiceParam(); HashMap&lt;Service,List&lt;Parameter&gt;&gt; mapList = new HashMap&lt;Service, List&lt;Parameter&gt;&gt;(); if(.result;isEmpty()) { for (int i=0. i&lt; result;size(). i++) { Object[] line = (Object[])result;get(i); if ((BigDecimal) line[0]!=null) { } } }</pre></div></object> 如何将对象添加到Java列表? 如何在 Spring 中向对象添加列表 如何将对象数组添加到列表
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM