1

在我的主要活动中,我有一个用于显示片段的框架布局,现在想象一下,我有 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();

现在在不同的时间点,应用程序可能在框架布局中具有三个片段之一(片段的数量可能会有所不同)。

所以,在某些时候,如果我想确定哪些片段当前显示在框架布局中,我该怎么做?

我的目的:fragment2 有 2 个状态,其中布尔状态可以是真或假,如果状态为真,并且按下后退按钮我想做一些事情并将状态设置为假,如果按下后退我'将调用 super.onBackPressed() 但如果它设置为 true 并且如果当前片段 3 是可见的,首先我想转到片段 2,然后将状态更改为 false 然后 super.onBackPressed()

所以如果我能确定哪个片段当前是可见的,这将是小菜一碟

4

2 回答 2

3

尝试这个

Fragment fragment = (Fragment)supportFragmentManager.findFragmentById(R.id.fragment_container) 
于 2018-12-03T10:00:01.147 回答
1

您的解决方案在这里

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");
        }

如果您在第一次 onBackPress 上做某事,请按照下面的代码,

@Override
    public void onBackPressed() {
        if (isBackPress) { //Default is false
            super.onBackPressed();
        } else {
            // On First time click do something 
               isBackPress=true;
        }
    }
于 2018-12-03T10:16:58.143 回答