使用 FragmentTransaction 将数据发送到片段
Send data to fragment with FragmentTransaction
我在我的片段中 class 调用这个:
@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
值)从我的父片段发送到我的子片段?
FragmentTransaction
只是过渡 Fragments,它没有 "pass" 任何东西。您需要使用 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");
将数据传递到片段的其他方法在 Best practice for instantiating a new Android Fragment
中讨论
只需将它们作为片段参数打包传递即可
在父片段中:
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);
您可以在片段中使用工厂方法class(按照文档中的建议)
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("string you need to pass");获取您的片段实例并在您的交易中使用它。
这里的关键其实是使用setArguments()方法传入数据。
然后,您可以像这样在片段的 oncreate 方法中检索此数据
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
streamSource = getArguments().getParcelable(KEY);
}
}
在你的 SettingsBlockedUsersFragment
class 中有一个像下面这样的静态方法
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();
我在我的片段中 class 调用这个:
@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
值)从我的父片段发送到我的子片段?
FragmentTransaction
只是过渡 Fragments,它没有 "pass" 任何东西。您需要使用 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");
将数据传递到片段的其他方法在 Best practice for instantiating a new Android Fragment
中讨论只需将它们作为片段参数打包传递即可
在父片段中:
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);
您可以在片段中使用工厂方法class(按照文档中的建议)
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("string you need to pass");获取您的片段实例并在您的交易中使用它。
这里的关键其实是使用setArguments()方法传入数据。 然后,您可以像这样在片段的 oncreate 方法中检索此数据
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
streamSource = getArguments().getParcelable(KEY);
}
}
在你的 SettingsBlockedUsersFragment
class 中有一个像下面这样的静态方法
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();