访问嵌套片段的文本字段

Posted

技术标签:

【中文标题】访问嵌套片段的文本字段【英文标题】:Access textfield of nested fragment 【发布时间】:2015-08-06 17:23:52 【问题描述】:

我有几个片段。有些片段的顶部和底部按钮相同,但内容不同。

因此,我在顶部和底部使用嵌套片段。这是我的 java 类:LogFragment.java。我为顶部导航和底部的页脚插入两个片段。

public class LogFragment extends Fragment 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    
        View rootview = inflater.inflate(R.layout.fragment_log, container, false);

        Fragment navigationFrag = new NavigationFrag();
        FragmentTransaction trans1 = getChildFragmentManager().beginTransaction();
        trans1.add(R.id.navigationFrag, navigationFrag).commit();

        Fragment footerFragment = new FooterFragment();
        FragmentTransaction trans2 = getChildFragmentManager().beginTransaction();
        trans2.add(R.id.footerFragment, footerFragment).commit();

        return rootview;
    

这是布局文件:fragment_log.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <FrameLayout android:id="@+id/NavigationFragment"
        android:layout_
        android:layout_ />

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:orientation="vertical">

        <Button
            android:id="@+id/button1"
            android:layout_
            android:layout_
            android:text="Start"/>

        <Button
            android:id="@+id/button2"
            android:layout_
            android:layout_
            android:text="Stop"
            android:layout_below="@+id/button1"/>

    </RelativeLayout>

    <FrameLayout android:id="@+id/FooterFragment"
        android:layout_
        android:layout_ />

</LinearLayout>

嵌套的NavigationFragmentFooterFragment 包含一些按钮、图像或文本字段。例如:fragment_footer.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

        <TextView
            android:id="@+id/logInfo"
            android:layout_
            android:layout_
            android:text="LOG" />

</RelativeLayout>

我的问题:

如何通过LogFragment.java 类访问/操作/填充嵌套片段中元素的一些数据?


例如:

我想通过LogFragment.java访问嵌套fragment_footer.xml的ID为logInfo的文本视图。

【问题讨论】:

【参考方案1】:

只需使用[child fragment].getView().findViewById(R.id.[elemnet id]) 即可获取嵌套片段中的元素。例如:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 

    View rootview = inflater.inflate(R.layout.fragment_log, container, false);

    Fragment navigationFrag = new NavigationFrag();
    FragmentTransaction trans1 = getChildFragmentManager().beginTransaction();
    trans1.add(R.id.navigationFrag, navigationFrag).commit();

    final Fragment footerFragment = new FooterFragment();
    FragmentTransaction trans2 = getChildFragmentManager().beginTransaction();
    trans2.add(R.id.footerFragment, footerFragment).commit();

    Button btn1 = (Button)rootview.findViewById(R.id.button1);
    btn1.setOnClickListener( new OnClickListener()
        @Override
        public void onClick(View v) 
            TextView txv = (TextView)footerFragment.getView().findViewById(R.id.logInfo);
            txv.setText("Updated log of Footer");
        
    );

    return rootview;

顺便说一句,

    子fragment只有在onCreateView()之后才能访问, 因此您需要将子片段声明为父片段的最终数据或成员数据。

【讨论】:

以上是关于访问嵌套片段的文本字段的主要内容,如果未能解决你的问题,请参考以下文章

如何动态访问嵌套错误/触及formik字段

访问视图中的嵌套表单字段(嵌入表单集合)

从第二个片段访问时 ViewModel 数据丢失状态

如何访问数据框 .proto、ScalaPB 中的嵌套字段

如何在 React/typescript 中访问嵌套 DOM 元素的文本值

开放策略代理 (OPA) Rego - 在运行时访问输入对象嵌套字段