片段如何从parentActivity获取数据?

时间:2016-04-29 15:01:37

标签: android android-fragments android-intent android-activity

我有2项活动MainActivityDetailActivity,如果我点击MainActivity中的ListView将意图DetailActivity内容为“id”,{{1}我有2个片段(TabLayout-ViewPager)。

我的问题是:片段如何从上面的那个意图获得“id”

3 个答案:

答案 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"); ...