0

感谢您花时间阅读我的问题。我有一个应用程序,其中我的应用程序有一个导航抽屉以及图标、标题和计数器。我没有足够的声誉来添加图片抱歉。这是一个带有示例的链接。

我将计数器设置为实际上是一个广播接收器,一旦触发特定事件,它将显示更新的计数。触发事件的流程如下:

  1. aFragment开始了。
  2. 一旦片段启动,它就会调用一个方法,该方法将这个类名插入一个名为 history 的表中(这个表历史记录将用于检索类名并创建该类的新活动)。
  3. 在同一个片段中,有一种方法可以将本地广播事件发送到接收器,这只是历史表的计数。计数是通过读取数据库并检索计数并将值存储到字符串中的方法完成的。然后它将值发送到接收器,接收器将使用API中的getExtraString()方法获取该值。LocalBroadcastManager
  4. 单击后退按钮后,您将返回主屏幕。
  5. 现在您单击滑块菜单图标以打开导航抽屉,“历史记录”选项卡的计数仍为 0。

为什么它没有根据收到的广播事件更新?

这是将项目添加到 navdrawer 和除广播接收器之外的计数器的代码。

navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));//Replace 22 with method to select count of history
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1), true, mMessageReceiver));
// What's hot, We  will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));

现在这里是注册广播接收器的代码。

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
          new IntentFilter("custom-event-name"));

这里是存储本地广播发送者发送的值的接收者。

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent){
        String test = intent.getStringExtra(getHistoryCount());
        //SendBroadcast send = new SendBroadcast();
        //send.sendLocationBroadcast(intent);
    }

};

这是getHistoryCount()您在上面的代码中看到的方法。这只是读取HISTORY表的计数。

private String getHistoryCount() {
    String _count = "0";
    FeedReaderDBHelper dbHelper = new FeedReaderDBHelper(this);
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor count = db.rawQuery("SELECT * From history", null);
    _count = Integer.toString(count.getCount());
    return _count;
}

这是处理插入数据库和向本地广播接收器发送事件的片段类。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    insertIntoDB();
    setListAdapter(new OsViewAdapter(getActivity(), vals));
    sendMessage();
}

这是上述方法中的方法定义,它甚至将广播发送到本地广播接收器。这是在与上面具有 onActivityCreated() 方法的代码相同的类中定义的。

private void sendMessage() {
    Intent intent = new Intent("custom-event-name");
    LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
}

private Context getContext() {
    // TODO Auto-generated method stub
    Context context;
    context = getActivity();
    return context;
}
4

1 回答 1

0
String test = intent.getStringExtra(getHistoryCount());

这条线期望在广播时设置一些键作为历史计数。

尝试这个:

private void sendMessage() {
    Intent intent = new Intent("custom-event-name");
    intent.putStringExtra("count",geHistoryCount());
    LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
}

在广播 onReceive 中:

    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent){
        String test = intent.getStringExtra("count");
        //SendBroadcast send = new SendBroadcast();
        //send.sendLocationBroadcast(intent);
    }

};
于 2013-12-15T15:07:07.057 回答