Pik*_*ing 463
用一个Bundle
.这是一个例子:
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
Run Code Online (Sandbox Code Playgroud)
Bundle为许多数据类型提供了方法.看到这个
然后在你的Fragment
,检索数据(例如在onCreate()
方法中):
Bundle bundle = this.getArguments();
if (bundle != null) {
int myInt = bundle.getInt(key, defaultValue);
}
Run Code Online (Sandbox Code Playgroud)
mik*_*hik 41
为了扩展先前的答案,就像Ankit所说的那样,对于复杂的对象,你需要实现Serializable.例如,对于简单对象:
public class MyClass implements Serializable {
private static final long serialVersionUID = -2163051469151804394L;
private int id;
private String created;
}
Run Code Online (Sandbox Code Playgroud)
在你FromFragment:
Bundle args = new Bundle();
args.putSerializable(TAG_MY_CLASS, myClass);
Fragment toFragment = new ToFragment();
toFragment.setArguments(args);
getFragmentManager()
.beginTransaction()
.replace(R.id.body, toFragment, TAG_TO_FRAGMENT)
.addToBackStack(TAG_TO_FRAGMENT).commit();
Run Code Online (Sandbox Code Playgroud)
在你的ToFragment中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Bundle args = getArguments();
MyClass myClass = (MyClass) args
.getSerializable(TAG_MY_CLASS);
Run Code Online (Sandbox Code Playgroud)
Sak*_*iah 16
getArguments()返回null,因为"它没有得到任何东西"
尝试使用此代码来处理这种情况
if(getArguments()!=null)
{
int myInt = getArguments().getInt(key, defaultValue);
}
Run Code Online (Sandbox Code Playgroud)
Ana*_*ani 13
使用片段到片段传递数据的完整代码
Fragment fragment = new Fragment(); // replace your custom fragment class
Bundle bundle = new Bundle();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
bundle.putString("key","value"); // use as per your need
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(viewID,fragment);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
在自定义片段类中
Bundle mBundle = new Bundle();
mBundle = getArguments();
mBundle.getString(key); // key must be same which was given in first fragment
Run Code Online (Sandbox Code Playgroud)
只是为了扩展以前的答案 - 它可以帮助某人.如果你getArguments()
返回null
,把它放到onCreate()
方法而不是片段的构造函数:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int index = getArguments().getInt("index");
}
Run Code Online (Sandbox Code Playgroud)