Как получить текущий фрагмент в Android с помощью ById или ByTag - PullRequest
0 голосов
/ 03 декабря 2018

В моей основной деятельности у меня есть структура кадра, которая используется для отображения фрагментов, теперь представьте, у меня есть 3 объекта фрагмента:

Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
Fragment3 f3 = new Fragment3();

, и я устанавливаю этот фрагмент, используя:

fragTrans.replace(android.R.id.content, f1);
fragTrans.addToBackStack(null);
fragTrans.commit();

Теперь в другое время приложение может иметь один из трех фрагментов в структуре кадра (количество фрагментов может отличаться).

Итак, в какой-то момент, если я хочу определить, какой из фрагментов, еслив настоящее время отображается в структуре кадра, как я могу это сделать?

Моя цель: фрагмент2 имеет, скажем, 2 состояния, где булево состояние может быть либо истинным, либо ложным, если состояние истинно, а кнопка возврата являетсянажал, я хочу сделать что-то и установить состояние в false, и если задняя часть нажата, я вызову super.onBackPressed (), но если он установлен в true и если в данный момент фрагмент 3 виден, сначала я хочу перейти к фрагменту 2затем измените состояние на false, а затем super.onBackPressed ()

, чтобы сделать его простым, если я смогу определить, какой фрагмент в данный момент видене

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Ваше решение здесь

1. Сначала вы замените фрагмент и замените строку этой строкой.

fragTrans.replace(android.R.id.content, f1,f1.getClass.getName());

Здесь f1.getClass,getName() - ключ текущего фрагмента.он дает вам имя фрагмента, который является заменой, или текущий фрагмент замены.

        FragmentManager manager = getSupportFragmentManager();

        Fragment1 fragment1 = (Fragment1) manager.findFragmentByTag(Fragment1.class.getName());

        Fragment2 fragment2 = (Fragment2) manager.findFragmentByTag(Fragment2.class.getName());

        Fragment3 fragment3 = (Fragment3) manager.findFragmentByTag(Fragment3.class.getName());

        if (fragment1 != null) {
            Log.e(TAG, "Current fragment is Fragment1");
        }else if(fragment2 != null) {
            Log.e(TAG, "Current fragment is Fragment2");
        }else if(fragment3 != null) {
            Log.e(TAG, "Current fragment is Fragment3");
        } else {
            Log.e(TAG, "Fragment 1-2-3 is null");
        }

Если вы делаете что-то в первый раз на BackBack, следуйте приведенному ниже коду,

@Override
    public void onBackPressed() {
        if (isBackPress) { //Default is false
            super.onBackPressed();
        } else {
            // On First time click do something 
               isBackPress=true;
        }
    }
0 голосов
/ 03 декабря 2018

Попробуйте это

Fragment fragment = (Fragment)supportFragmentManager.findFragmentById(R.id.fragment_container) 
...