J'ai 2 fragments: (1) Frag1 (2) Frag2.
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();
Comment puis-je obtenir ces données dans Frag2?
Vous avez une méthode appelée getArguments()
qui appartient à la classe Fragment
.
Appelez simplement getArguments()
dans la méthode onCreateView()
de votre Frag2
:
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");
}
}
Exemple: Ajouter des données: -
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);
Exemple: obtenir des données: -
String latitude = getArguments().getString("latitude")
dans Frag1:
Bundle b= new Bundle();
b.putStringArray("arrayname that use to retrive in frag2",StringArrayObject);
Frag2.setArguments(b);
dans Frag2:
Bundle b=getArguments();
String [] stringArray=b.getStringArray("arrayname that passed in frag1");
est-ce si simple?.
pour ceux comme moi qui cherchent à envoyer des objets autres que des primitives, étant donné que vous ne pouvez pas créer de constructeur paramétré dans votre fragment, ajoutez simplement un accesseur setter dans votre fragment, cela fonctionne toujours pour moi.
getArguments()
setArguments()
Les méthodes semblent très utiles quand il s'agit instancier un fragment en utilisant une méthode statique.
c'est-à-direMyfragment.createInstance(String msg)
Comment faire?
Code de fragment
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;
}
}
Supposons que vous souhaitiez passer une chaîne lors de la création d'une instance. Ce Voici comment vous allez le faire.
MyFragment.createInstance("This String will be shown in textView");
1)Pourquoi Myfragment.getInstance (String msg) est-il préférable au nouveau MyFragment (String msg)?
2)Exemple de code sur les fragments
call getArguments dans la méthode onCreateView ()