使用FragmentTransaction将数据发送到片段

时间:2016-03-16 16:29:39

标签: android android-fragments send android-bundle fragment-transitions

我在我的片段类中调用它:

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

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

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

4 个答案:

答案 0 :(得分:23)

只需将它们作为片段参数传递给它们

父片段中的

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

答案 1 :(得分:1)

float[] statProp = {.25 .30 .28 .11}; float[] statProperties = {.10 .15 .20 .30} float statPropTotal=0; for(int z=0; z<5; z++){ for(int x =0; x < 5) statProp[z] = stat[z+1] * (float)statProperties[z]; } for(int z=0; z<5; z++){ float statPropTotal=0; statPropTotal += (float)statProp[x]; } 只是过渡片段,它没有通过&#34;任何东西。您需要使用FragmentTransaction

Bundle

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

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

Best practice for instantiating a new Android Fragment

讨论了将数据传递到片段的其他方法

答案 2 :(得分: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(&#34;字符串,你需要传递&#34;);获取片段的实例并在事务中使用它。

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

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        streamSource = getArguments().getParcelable(KEY);
    }
}

答案 3 :(得分: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);
          }
    }
}

在你的片段交易中,你可以像这样传递args

final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content,SettingsBlockedUsersFragment.newInstance("my string"), FRAGMENT_TAG);
ft.commit();