如何在整个应用程序中使用“ LocalBroadcastManager”?

时间:2019-05-06 06:21:56

标签: java android broadcastreceiver android-broadcast

我有一个片段,显示产品列表。每个列表项都有一个监视列表按钮,如果未将其列入监视列表,则显示一个透明的心形图标;如果已列入监视列表,则显示一个红色的心形图标。用户可以在列表页面中单击该心脏图标以监视或取消监视该产品。

当单击项目的正文时,用户可以转到产品详细信息页面。 这里还有一个监视列表按钮。

我想要的功能是,当用户单击详细信息页面中的监视列表图标时,当用户从详细信息页面返回到列表页面时,它也应该更改列表页面中的监视列表图标。

为此,我使用了本地广播管理器,以便当用户单击详细信息页面中的监视列表图标时,它将发送带有产品ID和监视列表状态的广播。我只是更改适配器json数组数据,并将广播发送的详细信息发送到我在列表页面上编写的接收器上,并通知数据集已更改。

我的问题是,什么时候应该注销在清单页面上写的接收者?

我只是无法注销列表页面广播接收器,因为我想接收从另一个页面的详细信息页面发送的事件。

这是我在列表页面上写的收件人。

final BroadcastReceiver broadcastReceiverWatchlist = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                try{
                    LogHelper.logReadyMadeString("aaaaaaaaa13");
                    String product_id = intent.getStringExtra("productId");
                    String watchlistStatus = intent.getStringExtra("wishlistStatus");
                    for(int i=0;i<totalProductJsonArray.length();i++){
                    if(totalProductJsonArray.getJSONObject(i).getString("product_id").equalsIgnoreCase(productId)){
                        totalProductJsonArray.getJSONObject(i).put("watchlist",watchlistStatus);
                          productListingAdaterRv.notifyDataSetChanged();
                          break;
                        }
                        }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        };

LocalBroadcastManager.getInstance(mContext).registerReceiver(broadcastReceiverWatchlist, filter);

这是我在详细信息页面上编写的代码,用于将广播发送到列表页面

Intent intentToBroadCast = new Intent();

intentToBroadCast.setAction("com.applicationid.broadcast.WATCHLIST_NOTIFICATION");
intentToBroadCast.putExtra("wishlistStatus",watchlistStatus);
intentToBroadCast.putExtra("productId",productId);

LocalBroadcastManager.getInstance(mContext).sendBroadcast(intentToBroadCast);

代码运行正常。我在其详细信息页面中监视了产品。它在列表页面中发送广播,并更改相应产品ID的监视列表状态。

我想知道是否应该在列表页面上注销接收器?

感谢您的宝贵时间。如有任何疑问,请通知我。

注意:“产品列表”页面是家庭活动中的一部分。产品详细信息页面完全是另外一个活动。

1 个答案:

答案 0 :(得分:1)

只需在ProductListFragment的onDestroy中取消注册工作