如何使用ById或ByTag在android中获取当前片段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ById或ByTag在android中获取当前片段相关的知识,希望对你有一定的参考价值。

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

现在在不同的时间点,应用程序可能在framelayout中有三个片段之一(片段数量可能不同)。

所以,在某些时候,如果我想确定哪个片段当前显示在framelayout中,我该怎么做呢?

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

如果我可以识别出哪个片段当前可见,那将使它成为一块蛋糕

答案

您的解决方案在这里

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;
        }
    }
另一答案

试试这个

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

以上是关于如何使用ById或ByTag在android中获取当前片段的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA 更新行而不获取行 ById

dojo中registry.byId和dom.byId的区别?使用 registry.byId 有啥好处?

如何使用 GCM 在 Android 中解析或实际获取推送消息

如何获取在whatsapp或android中其他应用程序中使用的联系人

dojo:使用 registry.byID 返回“未定义”

Android:如何在状态栏中获取电池图标资源 ID 或完整文件路径/名称?