我有2项活动MainActivity
和DetailActivity
,如果我点击MainActivity
中的ListView将意图DetailActivity
内容为“id”,{{1}我有2个片段(TabLayout-ViewPager)。
我的问题是:片段如何从上面的那个意图获得“id”
答案 0 :(得分:1)
Fragment in android ,如果Android决定稍后重新创建Fragment,它将调用片段的无参数构造函数。所以重载构造函数不是解决方案。for more detail please read this stack overflow answer
private int mId;
private static final String ID = "id";
public static DetailsFragment newInstance(int id) {
DetailsFragment fragment = new DetailsFragment();
Bundle args = new Bundle();
args.putInt(ID, id);
fragment.setArguments(args);
return fragment;
}
在oncreate方法中获取值
@覆盖
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null)
//mId is variable which contain (YourActivity)MainActivity value.you can use in fragment.
mId = getArguments().getInt(ID);
}
//在oncreate方法中调用YourActivity(MainActivity)
int id = yourid;
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,DetailFragment.newInstance(id)).commit();
答案 1 :(得分:0)
来自Android Developer's Fragment Page
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
// add fragment to the fragment manager's stack
答案 2 :(得分:0)
就像@ cricket_007所说,在你的片段中创建一个工厂方法并通过bundle参数传递数据考虑下面的例子
public static YourFragment newInstance(Bundle args) {
Yourfragment fragment = new YourFragment();
Bundle bundle = args;
// Or if your args is a variable data for example a string
// use Bundle bundle = new Bundle(); bundle.putString("extra_name",value);
// Now set the fragment arguments
fragment.setArguments(bundle);
return fragment;
}
现在您可以在片段中的任何位置
Bundle args = getArguments();
// and access your extra by args.getString("extra_name"); ...