Как использовать методы setArguments () и getArguments () во фрагментах? - PullRequest
92 голосов
/ 25 марта 2011

У меня есть 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 ]

185 голосов
/ 21 августа 2012

Просто позвоните getArguments() в вашем Frag2 onCreateView() методе:

public class Frag2 extends Fragment {

     public View onCreateView(LayoutInflater inflater,
         ViewGroup containerObject,
         Bundle savedInstanceState){
         //here is your arguments
         Bundle bundle=getArguments(); 

        //here is your list array 
        String[] myStrings=bundle.getStringArray("elist");   
     }
}
36 голосов
/ 10 декабря 2015

Например: Добавить данные: -

   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")
23 голосов
/ 25 марта 2011

У вас есть метод с именем getArguments(), который относится к Fragment class.

6 голосов
/ 27 марта 2017

в 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");

это просто.

3 голосов
/ 07 июля 2016

для таких, как я, которые хотят отправлять объекты, отличные от примитивов, поскольку вы не можете создать параметризованный конструктор в своем фрагменте, просто добавьте метод доступа сеттера в ваш фрагмент, это всегда работает для меня.

1 голос
/ 03 января 2019

Правильный путь к фрагменту!

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) Почему Myfragment.getInstance (String MSG) предпочтительнее нового MyFragment (String MSG)? 2) Пример кода на фрагментах

0 голосов
/ 22 октября 2018

вызов getArguments в методе onCreateView ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...