Обработка намерений уведомлений FCM - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть активность "A", в которой есть видоискатель, загружающий 4 фрагментаКогда я получаю уведомление, мне нужно перейти к 3-му фрагменту в viewpager.Допустим, третий фрагмент будет «Frag3».Третий фрагмент - это вложенный фрагмент.У него есть два других фрагмента, скажем, «Frag3A» и «Frag3B».

Таким образом, реальный случай здесь, если я получаю уведомление с заголовком «NOT_A», мне нужно отобразить «Frag3A» и если «NOT_B», то янеобходимо отобразить «FRAG3B».

Поэтому, когда я получаю уведомление, я вызываю намерение (context -> Activity «A») с некоторыми данными с намерением идентифицировать «Frag3A» или «Frag3B».Задание A Я получаю данные из намерения и загружаю «Frag3».Это как я иду.Мне нужно выбрать между Frag3A и Frag3B.

Так что для этого случая я создал интерфейс в Activity A и реализовал его в Frag3.Я получаю ссылку на frag3 из адаптера viewpager. Код приведен ниже.Но ссылка, которую я получаю, является нулевой.

private class ViewPagerAdapter extends FragmentPagerAdapter {

    SparseArray<Fragment> registeredFragments = new SparseArray<>();

    ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new RoomMatesFragment();
            case 1:
                return new RoomsFragment();
            case 2:
                return new ChatFragment();
            default:
                return new ProfileFragment();
        }
    }

    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public Fragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }
}

И из этого getRegisteredFragment я получаю ссылку на Frag3 и присваиваю слушателю. Но этот getRegisteredFragment возвращает ноль.

case Constants.NOTIFICATION_CONTACT_REQUEST:
            goToTab(2);//This redirects to Fragment Frag3
            listener = (ContactsFragment)getRegisteredFragment(2);
            listener.displayContacts();//listener is null.
            break;

Чтоделать сейчас.У меня есть некоторые другие сомнения относительно Уведомления.Когда приложение находится на переднем плане или в фоновом режиме, уведомление приходит.Как проверить, находится ли он на переднем плане или на заднем плане?

...