使用EventBus的片段android之间的通信

问题描述 投票:0回答:2

要求:FragmentA包含列表---用户可以将任何项目标记为收藏/不收藏。标记收藏夹时,fragmentA中的图标将标记为红色,并且项目应出现在FavoriteFragment中。(使用EventBus实现了此功能]

类似地,将任何项目从FavoriteFragment中标记为不受欢迎,应从FavoriteFragment中将其删除,并且FragmentA图标将被标记为绿色(为此需要解决)

已尝试EventBus.getDefault()。register(this);在两个fragmentA和FavoriteFragment中但是在发布两个片段时都调用了[[onMessageEvent。

@Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(List<Event> result) { }
android observer-pattern event-bus
2个回答
1
投票
通过Gradle将EventBus添加到您的项目中

implementation 'org.greenrobot:eventbus:3.1.1'

数据模态(Data.java)

public class Data { private List<Boolean> markList; public List<Boolean> getMarkList() { return markList; } public void setMarkList(List<Boolean> markList) { this.markList = markList; } }

源片段(FragmentA.java)

public class FragmentA extends Fragment { private void sendDataToFavorit(){ List<Boolean> selectedList = new ArrayList<>(); selectedList.add(true); // index 0 selectedList.add(false); // index 1 Data data = new Data(); data.setMarkList(selectedList); EventBus.getDefault().post(data); } }

目标片段(FavoriteFragment.java)

public class FavoriteFragment extends Fragment { private Context context; public FavoriteFragment () { // Register your subscriber in constructor EventBus.getDefault().register(this); } @Override public void onDestroy() { // UnRegister your subscriber in onDestroy EventBus.getDefault().unregister(this); } @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(@NonNull Data data) { // Get data from FragmentA List<Boolean> markList = data.getMarkList(); if (markList != null && markList.size()>0) { for (int i = 0; i < markList.size(); i++) { Log.i("LOG", "list " + i + ": " + markList.get(i)); } } } }


0
投票
在填充列表并使用sqlite数据库时,添加项目的ID。选中或取消选中时保存项目的ID。当您填充列表时,请检查该ID是否匹配,以使其变为红色。希望对您有所帮助
© www.soinside.com 2019 - 2024. All rights reserved.