如何初始化视图寻呼机的内容?

时间:2015-10-07 15:52:03

标签: android android-fragments android-viewpager google-cloud-messaging android-sqlite

我在view pager中有MainActivity,此view pager包含两个标签 RecentFeedSavedFeed都使用相同的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>

1 个答案:

答案 0 :(得分:1)

确保您在Feed列表视图的适配器中执行以下操作:

 adapter.notifydatasetchanged()

至于viewpager,你可以这样做以防万一(虽然默认值是1或2):

 viewpager.setOffscreenpagelimit

除此之外,请确保在UI线程上执行这些功能。