创建片段而不从 java 代码实例化它
Posted
技术标签:
【中文标题】创建片段而不从 java 代码实例化它【英文标题】:Creating a fragment without instantiating it from java code 【发布时间】:2016-06-26 01:22:39 【问题描述】:我有一个由另一个人开发的项目。那里有一个片段,但我找不到是谁在实例化它。主要活动是否可以通过布局xml创建片段?也就是说,如果不使用“new Fragment”在Java代码中实例化它,是否可以通过一些xml或其他东西来实例化它?因为我检查了 Fragment 构造函数的用法,它也没有显示任何其他调用它的类。但是当我调试代码时,片段确实被调用了。如果可能的话,我怎样才能将活动中的参数传递给这个片段?因为如果它使用“Fragment f = new Fragment”创建,我可以使用 setArguments 方法,甚至可以通过构造函数传递它。但是在这样的情况下,我如何将值从活动传递到这个片段?请指教。
【问题讨论】:
是的。布局是的,有可能,请参阅docs。例如,从该页面:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_
android:layout_>
<fragment android:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_
android:layout_ />
<fragment android:name="com.example.android.fragments.ArticleFragment"
android:id="@+id/article_fragment"
android:layout_weight="2"
android:layout_
android:layout_ />
</LinearLayout>
【讨论】:
在这种情况下如何将参数传递给这个片段? 不能在实例化时,但可以在实例化后添加API来自定义片段。或者,将其从布局中移除并在 Activity 中的代码中创建它,以便您可以自定义片段的构造方式。 我需要加载这个片段 1 次。一方面,用户界面应该看起来不同,另一方面,它应该以另一种方式看起来。所以我必须根据传递给它的参数来做这件事。如何将参数传递给该片段? :( 为您的片段创建一个工厂方法并传递一个参数,您可以使用该参数来确定片段的行为方式。有关示例,请参见此链接:androiddesignpatterns.com/2012/05/…【参考方案2】:是否有可能由主要活动创建片段 通过布局xmls?
是的,这是一个静态的Fragment
。如果你检查布局文件,你应该会看到一个<fragment />
标签:
<fragment
android:id="@+id/example_fragment"
android:name="com.example.staticfragexample.MyFragment"
android:layout_
android:layout_ />
然后会有一个对应的MyFragment
类。要访问它,您可以使用getFragmentManager().findFragmentById(R.id.example_fragment);
【讨论】:
其实我不需要获取fragment实例。我对它的加载方式很好。但是,如果它是按照它看起来的方式创建的,我怎么能将参数传递给这个片段呢?为了启动这个片段,我调用了 MainActivity 类,这个片段最终加载。有没有办法通过我对 MainActivity 的调用将参数传递给这个片段? @mayooran 不是现在这样,不。但是,您可以通过((MyFragment)getFragmentManager().findFragmentById(R.id.example_fragment)).getView()
更新任何 UI 元素,只要您在 Activity
的 onCreate()
之后调用它,它将返回 Fragment
的根视图。不过,最简单的答案可能是重写代码以使用动态片段。【参考方案3】:
您是说片段不是通过 java 代码实例化的。这意味着它们必须已在 xml 中声明,并在像这样创建活动时立即实例化 -
<fragment android:name="com.test.SampleFragment"
android:id="@+id/sample_fragment"
android:layout_
android:layout_ />
在这种情况下,您不能使用setArguments()
,而是使用一些其他机制将数据发送到片段。
【讨论】:
以上是关于创建片段而不从 java 代码实例化它的主要内容,如果未能解决你的问题,请参考以下文章
我为一个类声明了一个变量,并将其传递给一个方法来实例化它,但原始变量仍未实例化
solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段