Как использовать «LocalBroadcastManager» во всем приложении? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть фрагмент, показывающий список продуктов.Каждый элемент списка имеет кнопку наблюдения, показывающую прозрачный значок сердца, если его нет в списке наблюдения, и красный значок сердца, если он есть в списке наблюдения. Пользователь может щелкнуть этот значок сердца на странице списка, чтобы просмотреть или отменить просмотр продукта.

При нажатии на тело элемента пользователь может перейти на страницу сведений о продукте.Здесь также есть кнопка наблюдения.

Функциональность, которую я хотел, заключается в том, что когда пользователь нажимает на значок наблюдения на странице сведений, он также должен изменить значок наблюдения на странице списка, когда пользователь возвращается из списка.страница сведений на страницу со списком.

Для этого я использовал локальный менеджер вещания, чтобы, когда пользователь щелкает значок списка наблюдения на странице сведений, он отправлял трансляцию с идентификатором продукта и состоянием просмотра.Я просто изменяю данные массива 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);

Код работает нормально.Я наблюдаю за продуктом на его странице с подробностями.Он отправляет широковещательную рассылку на странице списка и изменяет состояние списка наблюдения соответствующего идентификатора продукта.

Я хочу знать, когда, если нет, отменить регистрацию получателя на странице списка?

Спасибо заваше время.Если у вас есть какие-либо сомнения, пожалуйста, сообщите мне.

Примечание: страница со списком продуктов является фрагментом домашнего действия.Страница сведений о продукте - это совсем другое занятие.

1 Ответ

1 голос
/ 06 мая 2019

Просто отмените регистрацию работы в onDestroy ProductListFragment

...