如何在 Activity 的 Fragment 中添加按钮或 textView

Posted

技术标签:

【中文标题】如何在 Activity 的 Fragment 中添加按钮或 textView【英文标题】:How to add a button or textView inside a Fragment from Activity 【发布时间】:2015-10-07 04:48:33 【问题描述】:

我看到很多问题,但我所寻找的流程没有实现。基本上,我有一个简单的活动类,我在其中附加了一个片段。 现在,如果我尝试在下面的代码 sn-p 中添加视图

            FragmentManager fragmentManager = getFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            hello = SimpleFragment.newInstance("hello","helloo");
            fragmentTransaction.add(R.id.main, hello, "Fragment");
            ViewGroup vg = ((ViewGroup)fragmentManager.findFragmentById(R.id.fragment).getView());
            fragmentTransaction.commit();

vg 返回 null,因为在片段类中,尚未到达 onCreateView()。 所以我的问题是我如何从 Activity 中知道片段视图是否已准备好以及何时应该将视图添加到片段

【问题讨论】:

糟糕的想法(从活动中的片段访问 UI 元素)......问题是你为什么需要它...... @Selvin - 我没有得到你对我方法中可怕性的定义。如果有的话,请尝试解释并指导我正确的方法。我所尝试的只是找出一种将按钮、textview 等视图元素动态添加到片段的方法,因为我有一个场景需要根据我从 http 获得的数据使用此类视图元素运行时更新片段或插座。 首先你应该将方法添加到SimpleFragment 就像addMeNiceButtonWithSomeData(Data data) 片段最终应该推迟将UI元素添加到“更好的时间”(比如在onCreateView之后)......接下来......如果你需要几次添加这个 UI 元素,你应该考虑使用 ListView .... 也应该在 Service 中完成监听和发送一些东西 @Selvin 评论更像是自下而上地重复我的问题。 :) 解决方案是什么? 【参考方案1】:

我过去使用 ViewTreeeObservers 实现了类似的事情。对于空视图引用,我看到了与您相同的问题。这是为了以编程方式将新的子视图添加到父视图,而不是使用片段组,但同样的原则可能对您有用。

    if (actionButtionPanel.getHeight() == 0) 
        ViewTreeObserver actionButtonPanelObserver = actionButtionPanel.getViewTreeObserver();
        actionButtonPanelObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
            @Override
            public void onGlobalLayout() 
                ViewTreeObserver obs = getView().findViewById(R.id.llExamDetailInteractionBar).getViewTreeObserver();

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
                    obs.removeOnGlobalLayoutListener(this);
                 else 
                    obs.removeGlobalOnLayoutListener(this);
                
                addActionButtons();
            
        );
     else 
        addActionButtons();
    

这会检查尚未布局的面板(父视图),因此它的高度为 0,然后它注册一个观察者,该观察者在布局视图时触发并调用我的函数来添加子视图。

您可以在此处的上下文中查看此来源:https://github.com/o0rebelious0o/IC2014_ExICS_android_App/blob/master/ExICS/src/main/java/rce10/ic/ac/uk/exics/Fragments/ExamDetailFragment.java

【讨论】:

来自源代码,我觉得您正在尝试实现与我想要的相同的目标。如果我是正确的,可能是我正在寻找的方法是不可能的。简而言之 - Android 不会将片段视为视图,因此您不能真正将片段视为视图,我可能不得不考虑不同的方法,而不是实现向片段动态添加视图。

以上是关于如何在 Activity 的 Fragment 中添加按钮或 textView的主要内容,如果未能解决你的问题,请参考以下文章

android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象

如何在android中获取Fragment的包名(不是Activity的)[重复]

如何在Activity和Fragment之间进行回调?

如何从 Back Press 的 Activity 中返回 Fragment

如何在 Activity 的 Fragment 中添加按钮或 textView

如何在 Kotlin 中使用与 Activity 和 Fragment 相同的 RecyclerView 适配器?