我在view pager
中有MainActivity
,此view pager
包含两个标签
RecentFeed
和SavedFeed
都使用相同的FeedFragment
,因为它们都具有相同的布局
现在我想在新的gcm message
时更新这些片段的内容
收到或我的数据库发生了变化
这是迄今为止所做的事情:
我创建了一个changelistening
接口,如下所示 -
public interface OnDatabaseChangeListener {
void onChange();
}
然后在helper
类中使用它来通知更改如下
private OnDatabaseChangeListener databaseChangeListener;
public void setDatabaseChangeListener(OnDatabaseChangeListener databaseChangeListener){
this.databaseChangeListener = databaseChangeListener;
}
public void addNewAlertToDB(Alert alert) {
.
.
databaseChangeListener.onChange();
Log.d(TAG, "Added new alert " + title);
}
然后在我的GCMListenerService内部执行此操作
DatabaseHelper.getInstance(this).addNewAlertToDB(alert);
DatabaseHelper.getInstance(this)
.setDatabaseChangeListener(new OnDatabaseChangeListener() {
@Override
public void onChange() {
//what should I do here to update viewpager content in MAinActivity
}
});
同样在我的RecentFeed
标签中,我点击要保存的Feed ...以便将其移至SavedFeed
标签...
void onSaveClicked(View view, int pos) {
DatabaseHelper.getInstance(context)
.saveAlert(alerts.get(pos));
DatabaseHelper.getInstance(context)
.setDatabaseChangeListener(new OnDatabaseChangeListener() {
@Override
public void onChange() {
//what should I do here to update viewpager content in MAinActivity
}
});
removeItem(pos);
addItem(0);
Snackbar.make(view, "Item Saved", Snackbar.LENGTH_LONG)
.setAction("UNDO", null).show();
view.setEnabled(false);
}
但令我惊讶的是SavedFeed
仍然是空的....现在如果我关闭应用并重新启动... savedfeed
标签有内容。
所以我认为内容正在保存,但没有更新已保存Feed的viewpager
适配器。
所以我想知道的是如何在收到gcm消息时立即在RecentFeed
更新内容,以及在savefeed
保存Feed时如何更新recentfeed
。< / p>
答案 0 :(得分:1)
确保您在Feed列表视图的适配器中执行以下操作:
adapter.notifydatasetchanged()
至于viewpager,你可以这样做以防万一(虽然默认值是1或2):
viewpager.setOffscreenpagelimit
除此之外,请确保在UI线程上执行这些功能。