9

我在我的片段类中调用这个:

@OnClick(R.id.blockedLinkLayout)
public void onBlockedClick(){
    final FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.content, new SettingsBlockedUsersFragment(), FRAGMENT_TAG);
    ft.commit();
}

它只是用选择的一个替换我当前的片段。

我的问题是,如何String使用 FragmentTransaction 从我的父片段向我的子片段发送一些数据(例如值)?

4

4 回答 4

30

只需将它们作为片段参数传递到一个包中

在父片段中:

SettingsBlockedUsersFragment fragment = new SettingsBlockedUsersFragment();
Bundle arguments = new Bundle();
arguments.putString( string_key , desired_string);
fragment.setArguments(arguments);
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, fragment , FRAGMENT_TAG);
ft.commit();

在子片段中:

Bundle arguments = getArguments();
String desired_string = arguments.getString(string_key);
于 2016-03-16T16:37:46.963 回答
3

FragmentTransaction只是过渡片段,它不会“传递”任何东西。您需要使用Bundle.

SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment();
Bundle b = new Bundle();
// put stuff into bundle...
b.putString("user", "steve");

// Pass the bundle to the Fragment
frag.setArguments(b);

// Use Fragment Transaction
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, frag, FRAGMENT_TAG);
ft.commit();

然后在 Fragment 的 onCreate 里面,你可以做

String user = getArguments().getString("user");

在实例化新 Android 片段的最佳实践中讨论了将数据传递到片段中的其他方法

于 2016-03-16T16:35:29.553 回答
0

您可以在片段类中使用工厂方法(如文档中推荐的那样)

public static YourFragment newInstance(String sample) {
    YourFragment fragment = new YourFragment();
    Bundle args = new Bundle();
    args.putString(KEY, sample);
    fragment.setArguments(args);
    return fragment;
}

然后调用 YourFragment.newInstance("你需要传递的字符串"); 获取您的片段实例并在您的事务中使用它。

这里的关键实际上是使用 setArguments() 方法传入数据。然后,您可以像这样在片段的 oncreate 方法中检索此数据

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        streamSource = getArguments().getParcelable(KEY);
    }
}
于 2016-03-16T16:40:20.010 回答
0

在您的SettingsBlockedUsersFragment班级中有一个静态方法,如下所示

public class SettingsBlockedUsersFragment extends Fragment {
    private static final String MY_STRING = "my_string";


    public static SettingsBlockedUsersFragment newInstance(String yourStringValue){
        SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment();
        Bundle args = new Bundle();
        args.putString(MY_STRING, yourStringValue);
        frag.setArguments(args);
        return frag;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState){
          Bundle args = getArguments();
          if(args != null){
               String myString = args.getString(MY_STRING);
          }
    }
}

在您的片段事务中,您可以像这样传递参数

final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content,SettingsBlockedUsersFragment.newInstance("my string"), FRAGMENT_TAG);
ft.commit();
于 2016-03-16T16:40:54.767 回答