如何通过片段传递字符串数据



我一直在Fragment 's之间工作,使用FragmentManager 's在我的项目中保持导航抽屉的视图。

我想要的是从Fragment a中获得一个字符串,并在Fragment b上的TextView上显示它,因为我不使用Intent 's,我不知道如何做到这一点。有人能帮帮我吗?

下面是我的一段代码,用来解释我如何在我的项目中更改视图。

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();
    }                           
});

我有一个主类,有一个xml片段视图称为容器,有我显示活动的内容。

下面是该XML的一个示例:

<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>

这就是我在项目中显示内容的方式。在视图类B中,我只是做了一个onCreateView来膨胀元素并使用它们。

再次,我需要的是传递一个字符串从Fragment AFragment B。我没有使用意图。

有谁能帮帮我吗?

来自Fragment文档:

通常你会希望一个片段与另一个片段通信,例如根据用户事件更改内容。所有片段到片段的通信都是通过相关的活动完成的。两个fragment不应该直接通信。

可以使用Bundle将数据从一个Fragment传递到另一个Fragment:

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

在接收端:

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

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

  • 将字符串存储在包含片段的活动中。该活动将作为第一个片段的回调,因此当它发生变化时,它可以接收这个字符串。由于活动是在它们之间进行交换的活动,因此只需将值放在一个bundle中,以便为第二个片段提供第一个片段的字符串值。(对我来说,这不是最好的选择,但取决于你)
  • 将字符串存储在第一个片段中,并提供一个getter以便activity可以获取它。当需要在片段之间交换时,只需获取第一个片段的值并将其提供给第二个片段。
  • 如果这两个片段生活在一起(看起来在你的应用程序中不是这样),干净的选择是创建一个接口,由使用String的片段实现,并由提供String的片段使用。只需让一个片段通过这个接口认识另一个片段(而不是片段本身)。

现在,这里有一些代码。把一个bundle放到一个fragment上:

 Bundle bundle = new Bundle();
 bundle.putString("someString", stringValue);
 fragment.putArguments(bundle);

要在fragment中获取这个bundle的值:fragment.getArguments().getString("someString");

要获得当前片段,是在您的容器使用方法FragmentManager#findFragmentByIdFragmentManager#findFragmentByTag

相关内容

  • 没有找到相关文章

最新更新