如何从android中的活动访问多个嵌套片段中的元素

时间:2016-10-03 21:42:58

标签: android android-fragments

我正在为我的Android应用程序开发“导游”功能,需要在当前屏幕上调暗和照亮某些元素。我正在为每个屏幕使用片段,当我尝试从活动中访问这些片段中的元素时,它们总是为空。我遇到了无数问题,似乎没有人帮助我。

片段的结构如下:

  • 我正在使用只有两个标签的Fragment TabHost。
  • 每个标签小部件都有一个容器片段,用于在一个标签内切换片段A和片段B.

我将从Tab一开始巡视,片段b,但是每次我尝试获取它们为null的元素时,即使我创建了一个新的片段,然后再尝试深入研究嵌套片段。

我正在尝试使用getSupportFragmentMangager()来查找片段,但由于我必须获取3个片段的元素,所以我最终尝试对空元素执行操作。我希望我不会错过这里简单的事情。我不确定从哪里开始。

3 个答案:

答案 0 :(得分:0)

为什么不在活动中存储您需要全局访问的变量的静态引用,然后像MyActivity.class.myVariable那样访问它们并使用getSupportFragmentManager#replace()动态交换片段?

答案 1 :(得分:0)

您可以使用getChildFragmentManager()代替getSupportFragmentMangager()

答案 2 :(得分:0)

我发现我的问题是片段创建的视图根本没有完成,因此在我调用代码从片段布局中获取元素时不会显示。我需要等到它被创建完成然后我才能找到包含嵌套片段中的元素的任何元素。视图的嵌套并不重要。

此代码解决了我的问题:

import android.os.Handler;



//After doing replace transaction
final FragmentManager fragmentManager = getSupportFragmentManager();
final Handler handler = new Handler();
//Wait for fragment view to be created
handler.postDelayed(new Runnable() {
    @Override
    public void run(){
        //Do stuff after 100 miliseconds
        TabHostParent_Fragment myFrag = (TabHostParent_Fragment) fragmentManager.findFragmentByTag("tabhost_frag");
        Switch auto_switch = (Switch) findViewById(R.id.auto_switch);
        auto_switch.performClick();
    }
}, 100);