簡體   English   中英

將數據發送到另一活動的一個活動的片段?

[英]Send data to one activity's fragment from another activity?

我有MainActivity,其中包含帶有選項卡的TabLayout:每個選項卡都是一個片段,每個選項卡都有RecyclerView。 當我在主活動中點擊FAB時,NewReminderActivity被打開。

我使用架構組件:實體(提醒),DAO,Room,ViewModel,LiveData和存儲庫。

問題是:

  • 我應使用哪種方法將新創建的提醒項傳遞到片段中(片段包含上面提到的RecyclerView?

我有一些想法,但是請您幫我,給我正確的實施方向:

1)我想,我應該先將數據傳遞給MainActivity,然后再從MainActivity傳遞至片段,並按照https://developer.android.com/topic/libraries/architecture/viewmodel.html#sharing中所述使用ViewModel,對嗎?

2)我猜我應該在NewReminderActivity中使用setResult(),對嗎?

如果您使用的是Room,則無需使用setResult將新項目轉移到這些以前的“片段/活動”中的任何一個,因為Room會自動管理無效。

@Dao
public interface MyDao {
    @Query("SELECT * FROM ITEM")
    LiveData<List<Item>> getItemsWithChanges();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertItem(Item item);
}

然后

public class MyViewModel extends ViewModel {
    private final LiveData<List<Item>> items;

    public LiveData<List<Item>> getItems() {
        return items;
    }

    public MyViewModel(MyDao myDao) {
        items = myDao.getItemsWithChanges();
    }
}

然后

public class MyFragment extends Fragment {
    MyViewModel myViewModel;

    @Override
    protected void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        myViewModel = ViewModelProviders.of(getActivity(), viewModelFactory).get(MyViewModel.class);
        myViewModel.getItems().observe(getViewLifecycleOwner(), (items) -> {
            if(items != null) {
                adapter.submitList(items);
            }
        });
    }
}

在這種情況下,您需要在第二個活動中要做的就是插入新項,然后完成:

// imagine this is on background thread
myDao.insertItem(item);
runOnUiThread(() -> {
    finish();
});

並且您的所有RecyclerViews都將使用新項進行更新(如果條件匹配,它們將成為結果的一部分)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM