如何通过片段

时间:2015-07-10 20:41:30

标签: java android string user-interface android-fragments

我使用FragmentFragmentManager之间工作,以便在我的项目中保留导航抽屉的视图。

我想要的是从Fragment A获取字符串,并在TextView B的Fragment上显示。因为我没有使用{{1}我不知道该怎么做。有人可以帮帮我吗?

这是我的一段代码,用于解释我如何更改项目中的视图。

Intent

我的Main类有一个带有Fragment Views的xml,称为容器,在那里我显示了Activity的内容。

以下是该XML的示例:

Button button = (Button) view.findViewById(R.id.btn_next);
button.setOnClickListener(new View.OnClicklistener(){

    @Override
    public void onClick(View v){

        Fragment frag_A = new ViewClassB();
        FragmentManager fm = getSupportFragmentManager();
        fm.beginTransaction()
            .replace(R.id.container, frag_A)
            .commit();

    }                           
});

这就是我在项目中展示内容的方式。在View类B中,我只需要<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.ViewClassA" > <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#fff" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Welcome" android:id="@+id/text1" android:layout_gravity="center" android:layout_marginTop="20dp" android:textColor="#52D5EC" /> </LinearLayout> </FrameLayout> </android.support.v4.widget.DrawerLayout> 来膨胀元素并使用它们。

同样,我需要的是将一个字符串从onCreateView传递给Fragment A。我没有使用意图。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

来自Fragment documentation

  

通常,您会希望一个片段与另一个片段进行通信,例如根据用户事件更改内容。所有Fragment-to-Fragment通信都是通过相关的Activity完成的。两个碎片永远不应该直接沟通。

您可以使用Bundle将数据从一个片段传递到其他片段:

MyFragment myFragment = new MyFragment();
Bundle args = new Bundle();
args.putString(<KEY>, <VALUE>);
myFragment.setArguments(args);

在收件人的最后:

String value = getArguments().getString(<KEY>, <DEFAULT_VALUE>);

答案 1 :(得分:0)

在片段之间共享内容的方式取决于您的偏好。有很多选择,所以选择一个你觉得更舒服的选择:

  • 将字符串存储在包含片段的活动中。该活动将充当第一个片段的回调,因此它可以在更改时接收此字符串。由于活动是在它们之间交换的活动,因此只需将值放在一个包中,以便为第二个片段提供第一个片段的字符串值。 (对我而言,这不是最好的选择,但取决于你)
  • 将字符串存储在第一个片段中并提供一个getter,以便活动可以获取它。当需要在片段之间进行交换时,只需获取第一个片段的值并将其以捆绑形式提供给第二个片段。
  • 如果两个片段一起生活(看起来你的应用程序不是这种情况),clean选项是创建一个接口,由消耗String的片段实现,并由提供String的片段使用。让一个片段通过这个接口知道另一个片段(而不是片段本身)。

现在,有一些代码。 将包放在片段上:

fragment.getArguments().getString("someString");

要在片段中获取此捆绑包值: FragmentManager#findFragmentById

要获取容器中的当前片段,请使用方法FragmentManager#findFragmentByTag或{{1}}。