Bagaimana cara menggunakan metode setArguments () dan getArguments () di Fragmen?


98

Saya memiliki 2 fragmen: (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();

Bagaimana cara mendapatkan data ini di Frag2?

Jawaban:


26

Anda memiliki metode yang disebut getArguments()milik Fragmentkelas.


192

Panggil saja getArguments()di Anda Frag2's onCreateView()metode:

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

12
Ini mengembalikan nol dalam kasus saya, ada ide mengapa ini terjadi?
Anirudh

2
Anda memasukkan ArrayList ke dalam bundel, tetapi mendapatkan String Array. Anda harus melakukannyabundle.getStringArrayList("elist");
RafaƂ

1
Anda lupa pernyataan pengembalian:return super.onCreateView(inflater, container, savedInstanceState);
user41805

4
Oncreateview menelepon sepanjang waktu. Jadi cukup panggil getarguments dalam metode oncreate (). Ini akan memanggil hanya ketika fragmen dihancurkan atau waktu yang baru dibuat.
Mohamed Ibrahim

5
@almaz_from_kazan @HabeebPerwad Mengapa Anda menggunakan getArguments() di onCreateView, bukan di onCreate?
Nik Kober

38

Misalnya: Tambah data: -

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

Misalnya: Dapatkan data: -

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

7

di Frag1:

Bundle b = new Bundle();

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

Frag2.setArguments(b);

di Frag2:

Bundle b = getArguments();

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

Sesederhana itu.


5

Instansiasi Fragmen dengan cara yang benar!

getArguments() setArguments()Metode tampaknya sangat berguna saat membuat instance Fragmen menggunakan metode statis.
yaituMyfragment.createInstance(String msg)

Bagaimana cara melakukannya?

Kode fragmen

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;
   }

}

Katakanlah Anda ingin melewatkan String saat membuat Instance. Beginilah cara Anda melakukannya.

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

Baca lebih banyak

1) Mengapa Myfragment.getInstance (String msg) lebih disukai daripada MyFragment (String msg) baru?
2) Contoh kode pada Fragmen


android.os.Bundle tidak memiliki setString. Apakah yang Anda maksud putString ()?
Stealth Rabbi

2

bagi mereka seperti saya yang ingin mengirim objek selain primitif, karena Anda tidak dapat membuat konstruktor berparameter di fragmen Anda, cukup tambahkan aksesor setter di fragmen Anda, ini selalu berhasil untuk saya.


Itu cara yang salah. Jika sebuah fragmen dibuat ulang, parameter tersebut akan hilang. Parameter yang dikirim ke fragmen harus dapat serial, melewati setArguments(). Parameter yang tidak dapat dialihkan dapat disetel dengan penyetel, tetapi harus dipanggil lagi pada aktivitas / pembuatan ulang fragmen.
CoolMind
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.