第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過更改列表類型進行Android LiveData轉(zhuǎn)換

通過更改列表類型進行Android LiveData轉(zhuǎn)換

慕運維8079593 2021-05-01 11:27:28
我有這個視圖模型public class MainViewModel extends AndroidViewModel {        // Constant for logging        private static final String TAG = MainViewModel.class.getSimpleName();        private LiveData<List<JournalEntry>> journals;        public MainViewModel(Application application) {            super(application);            AppDatabase database = AppDatabase.getInstance(this.getApplication());            Log.d(TAG, "Actively retrieving the tasks from the DataBase");            journals = database.journalDao().loadAllJournals();        }        public LiveData<List<JournalEntry>> getJournals() {            return journals;        }    }返回一個LiveData<List<JournalEntry>>我想轉(zhuǎn)換實時數(shù)據(jù)以返回一個LiveData<List<ListItem>>ListItem列表包含JournalEntry對象和DateHeader對象的地方我曾試圖像這樣操縱觀察清單private void setupViewModel() {        MainViewModel viewModel = ViewModelProviders.of(this).get(MainViewModel.class);        viewModel.getJournals().observe(this, new Observer<List<JournalEntry>>() {            @Override            public void onChanged(@Nullable List<JournalEntry> journalEntries) {                Log.d(TAG, "Updating list of tasks from LiveData in ViewModel");                Map<Date, List<JournalEntry>> journals = toMap(journalEntries);                Date previousDate = null;                for (Date date : journals.keySet()) {                    HeaderItem header = new HeaderItem(date);                    Date currentDate = header.getDate();                    if(previousDate==null || !DateUtil.formatDate(currentDate).equals(DateUtil.formatDate(previousDate))){                        items.add(header);                    }但是意識到視圖模型正在復制onChange的所有項目,而不僅僅是更新已更改的項目。我不太確定如何使用LiveData轉(zhuǎn)換實現(xiàn)此目標
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

我有了MediatorLiveData想要的東西,然后使用每個onChanged清除了列表ItemList。我將MediatorLiveData值設置為ItemList的新列表,并進行觀察


 private void setupViewModel() {

        MainViewModel viewModel = ViewModelProviders.of(this).get(MainViewModel.class);

        final LiveData<List<JournalEntry>> liveItems = viewModel.getJournals();

        final MediatorLiveData itemListData = new MediatorLiveData<>();

        itemListData.addSource(liveItems, new Observer<List<JournalEntry>>() {

            @Override public void onChanged(List<JournalEntry> journalEntries) {

                Map<Date, List<JournalEntry>> journals = toMap(journalEntries);

                Date previousDate = null;

                items.clear();

                for (Date date : journals.keySet()) {

                    HeaderItem header = new HeaderItem(date);

                    Date currentDate = header.getDate();

                    if (previousDate == null || !DateUtil.formatDate(currentDate).equals(DateUtil.formatDate(previousDate))) {

                        items.add(header);

                    }


                    for (JournalEntry journal : journals.get(date)) {

                        JournalItem item = new JournalItem(journal);

                        items.add(item);

                        previousDate = item.getJournalItem().getCreatedAt();

                    }

                }

                itemListData.setValue(items);



            }

        });


        itemListData.observe(this, new Observer<List<ListItem>>() {

            @Override

            public void onChanged(@Nullable List<ListItem> journalEntries) {

                Log.d(TAG, "Updating list of tasks from LiveData in ViewModel");

                mAdapter.setItems(journalEntries);

            }

        });



    }


查看完整回答
反對 回復 2021-05-12
  • 1 回答
  • 0 關注
  • 254 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號