[英]Send data to one activity's fragment from another activity?
我有MainActivity,其中包含帶有選項卡的TabLayout:每個選項卡都是一個片段,每個選項卡都有RecyclerView。 當我在主活動中點擊FAB時,NewReminderActivity被打開。
我使用架構組件:實體(提醒),DAO,Room,ViewModel,LiveData和存儲庫。
問題是:
我有一些想法,但是請您幫我,給我正確的實施方向:
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.