如何在Fragments中使用setArguments()和getArguments()方法?

时间:2011-03-24 21:10:13

标签: android android-fragments

我有2个片段:(1)Frag1(2)Frag2。

Frag1

bundl = new Bundle();
bundl.putStringArrayList("elist", eList);

Frag2 dv = new Frag2();
dv.setArguments(bundl);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.the_fragg,dv);
ft.show(getFragmentManager().findFragmentById(R.id.the_fragg)); 
ft.addToBackStack(null);
ft.commit();

如何在Frag2中获取此数据?

7 个答案:

答案 0 :(得分:185)

只需使用getArguments()的{​​{1}}方法拨打Frag2

onCreateView()

答案 1 :(得分:36)

例如:添加数据: -

   Bundle bundle = new Bundle();
   bundle.putString("latitude", latitude);
   bundle.putString("longitude", longitude);
   bundle.putString("board_id", board_id);
   MapFragment mapFragment = new MapFragment();
   mapFragment.setArguments(bundle);

例如:获取数据: -

String latitude =  getArguments().getString("latitude")

答案 2 :(得分:23)

您有一个名为getArguments()的方法属于Fragment类。

答案 3 :(得分:6)

在Frag1中

Bundle b= new Bundle();

b.putStringArray("arrayname that use to retrive in frag2",StringArrayObject);

Frag2.setArguments(b);
Frag2中的

Bundle b=getArguments();

String [] stringArray=b.getStringArray("arrayname that passed in frag1");

就这么简单。

答案 4 :(得分:3)

对于像我这样想要发送原​​语以外的对象的人, 因为您无法在片段中创建参数化构造函数,只需在片段中添加一个setter访问器,这对我来说总是有效。

答案 5 :(得分:1)

以正确的方式实例化片段!

  

getArguments() setArguments()方法似乎很有用   使用静态方法实例化片段。
  即Myfragment.createInstance(String msg)

该怎么做?

片段代码

public MyFragment extends Fragment {

    private String displayMsg;
    private TextView text;

    public static MyFragment createInstance(String displayMsg)
    {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.setString("KEY",displayMsg);
        fragment.setArguments(args);           //set
        return fragment;
    }

    @Override
    public void onCreate(Bundle bundle)
    {
        displayMsg = getArguments().getString("KEY"):    // get 
    }

    @Override
    public View onCreateView(LayoutInlater inflater, ViewGroup parent, Bundle bundle){
        View view = inflater.inflate(R.id.placeholder,parent,false);
        text = (TextView)view.findViewById(R.id.myTextView);
        text.setText(displayMsg)    // show msg
        returm view;
   }

}
  

假设您要在创建实例时传递字符串。这个   是你将如何做的。

MyFragment.createInstance("This String will be shown in textView");

了解更多

1) Why Myfragment.getInstance(String msg) is preferred over new MyFragment(String msg)?
2) Sample code on Fragments

答案 6 :(得分:-1)

onCreateView ()方法中调用 getArguments