我在活动中添加了三个列表片段。
用户可以在Tab1和Tab2上为项目添加书签,然后在书签标签/片段中显示。
我想知道,当在Tab1或Tab2上添加书签时,如何调用bookmarks片段的notifyDataSetChanged()来刷新listview。
我是否可以获得与其他列表片段关联的listAdapter来刷新listview项目。
感谢。
答案 0 :(得分:0)
有很多方法可以实现这个目标
方式1:
您必须在ViewPager.OnPageChangeListener
和
ViewPager
@Override
public void onPageSelected(int position) {
// get the instance of the listview from the fragment and refresh it.
}
刷新listview。
更好的方式
方式2:
使用EventBus
link.
compile 'de.greenrobot:eventbus:2.4.0'
只有您需要post
和register
数据。它会做所有的事情。
发件人或收件人可能是Activity
,Fragment
或任何Background threads
。
答案 1 :(得分:0)
你需要一个观察者模式。 Tab1和tab2将广播一条消息,Bookmark标签/片段将收听该消息并相应地通知
从Tab1和Tab2,您可以通过以下方式触发广播消息:
EventsListeners.getInstance().broadCastEvent(ListenerCategory.CATEGORY_BOOKMARK, ChangeEvents.EVENT_UPDATE, null);
在书签标签/片段中,您可以实现“EventObserver”接口并覆盖方法“broadCastEvent”
@Override
public void broadCastEvent(ListenerCategory tabType, ChangeEvents event, Bundle data) {
if (tabType == ListenerCategory.CATEGORY_BOOKMARK) {
if (event == ChangeEvents.EVENT_UPDATE) {
runOnUiThread(new Runnable() {
public void run() {
// call notify datasetChanged
}
});
}
}
}
您还必须在同一个活动或片段中注册监听器:
public void registerListeners() {
EventsListeners.getInstance().registerListeners(this, ListenerCategory.LISTENER_BOOKMARK);
}
public void unRegisterListeners() {
EventsListeners.getInstance().unRegisterListener(this, ListenerCategory.CATEGORY_BOOKMARK);
}
ChangeEvents.java
public enum ChangeEvents {
EVENT_UPDATE;
}
EventObserver.java
public interface EventObserver {
public void broadCastEvent(ListinerCategory tabType, ChangeEvents event, Bundle data);
}
EventListeners.java
public class EventsListeners {
private static EventsListeners commonListeners = null;
private EventListener[] listenersArry = null;
private EventsListeners() {
this.listenersArry = new EventListener[ListinerCategory.values().length];
for (int i = 0; i < this.listenersArry.length; i++) {
this.listenersArry[i] = new EventListener();
}
}
public static EventsListeners getInstance() {
if (EventsListeners.commonListeners == null) {
EventsListeners.commonListeners = new EventsListeners();
}
return EventsListeners.commonListeners;
}
public void registerListeners(EventObserver listener, ListinerCategory type) {
this.listenersArry[type.ordinal()].registerListener(listener);
}
public boolean contain(EventObserver listener, ListinerCategory type) {
return this.listenersArry[type.ordinal()].contain(listener);
}
public void replaceRegister(EventObserver listener, ListinerCategory type) {
this.listenersArry[type.ordinal()].replaceRegister(listener);
}
public void unRegisterListener(EventObserver listener, ListinerCategory type) {
this.listenersArry[type.ordinal()].unRegisterListener(listener);
}
public void unRegisterAllListener(ListinerCategory type) {
this.listenersArry[type.ordinal()].unRegisterAllListener();
}
public void broadCastEvent(ListinerCategory type, ChangeEvents event) {
this.listenersArry[type.ordinal()].broadCastEvent(type, event);
}
public void broadCastEvent(ListinerCategory type, ChangeEvents event, Bundle data) {
this.listenersArry[type.ordinal()].broadCastEvent(type, event, data);
}
public void destroyObject() {
for (final EventListener element : this.listenersArry) {
element.destoryObject();
}
this.listenersArry = null;
EventsListeners.commonListeners = null;
}
}
ListenerCategory.java
public enum ListinerCategory {
CATEGORY_BOOKMARK;
public static ListinerCategory get(int index) {
return ListinerCategory.values()[index];
}
}