我有一个BroadcastReceiver
,用于AlarmManger
设置的不同闹钟。此接收器将在启动时检查事件是否已满足(取决于位置)。
这些事件通过BaseExpandableListAdapter
显示。从Receiver更新适配器中的事件的最简单方法是什么?
接收器不能是内部类!它用于不同的活动和碎片!
我尝试的是将回调传递给我的适配器以通知Activity / Fragment更新数据。 "Events before"
和"Events after"
始终为0(我认为这是由于getInstance()
- 方法以某种方式失败)。
public class EventAdapter(Context context, List<Event> events, EventAdapterCallback callback) {
super();
this.context = context;
this.events = events;
this.callback = callback;
instance = this;
}
public static EventAdapter getInstance() {
return instance;
}
public void requestUpdate() {
callback.update();
}
public class EventBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
// ... doing my stuff
// send live update to the adapter
EventAdapter.getInstance().requestUpdate();
}
}
public class RandomFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
eventsAdapter = new EventAdapter(getActivity(), events, new EventAdapterCallback() {
public void update() {
Log.i("Events before:", String.valueOf(events.size()));
events.clear();
events.addAll(database.getList());
Log.i("Events after:", String.valueOf(events.size()));
eventsAdapter.notifyDataSetChanged();
}
});
}
}
答案 0 :(得分:1)
使用观察者模式,让所有适配器实现一个接口,让我们说Updatable,包含update()方法。
有任何经理&#34;单身&#34;或者您的应用程序类,在所有活动或具有需要更新的适配器的片段中都有一个List,将该适配器添加到列表中,在销毁活动或片段时,从列表中删除适配器。 / p>
当你有需要更新适配器的东西时,循环遍历列表并调用他们的更新方法。
答案 1 :(得分:1)
也许你在代码中的某个地方这样做了。但我无法找到它。
您需要在片段中注册广播接收器。
@Override
public void onResume()
{
super.onResume();
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance (this);
localBroadcastManager.registerReceiver (<instance-of-your-broadcast-receiver>, new IntentFilter ("UpdateRandomFragment"));
}
@Override
public void onPause()
{
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver (<instance-of-your-broadcast-receiver>);
}
在你的onReceive
中 @Override
public void onReceive(final Context context, Intent intent)
{
String action = intent.getAction();
if (action.equals ("UpdateRandomFragment"))
{
((RandomFragment)context).eventAdapter.clear();
((RandomFragment)context).eventAdapter.addAll(...);
((RandomFragment)context).eventAdapter.notifyDataSetChanged();
}
}