bundle.getArgumentes() n'est pas nul car j'ai testé avec Toast.makeText. Condition testée pour (bundle != null) et (bundle == null), elle me dit qu'elle n'est pas nulle

Activité principale - Cette fonction est à l'intérieur de spinner.setOnItemSelectedListener. Je souhaite transmettre les informations sélectionnées à un autre fragment

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            String dateName = spinner.getSelectedItem().toString();
            Bundle bundle = new Bundle();
            bundle.putString("mymonth", dateName);
            HomeFragment homefrag = new HomeFragment();
            homefrag.setArguments(bundle);
            FragmentManager fragManager = getSupportFragmentManager();
            fragManager.beginTransaction().replace(R.id.fragment_container,homefrag).commit();

        }

HomeFragment - Fonction OnCreateView

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View ListView = inflater.inflate(R.layout.fragment_home,container,false);
    bundle = this.getArguments();
    if(bundle == null){
        Toast.makeText(getActivity(),
                "lolol",
                Toast.LENGTH_SHORT)
                .show();
    }

    //String myMonth = bundle.getString("mymonth"); //if i uncomment this, it will cause app crash
    return ListView;
}
0
Misaki 4 nov. 2019 à 08:43

4 réponses

Modifiez votre méthode onCreateView pour le fragment cible comme ci-dessous.

public View onCreateView(@NonNull LayoutInflater inflater, 
                         @Nullable ViewGroup container, 
                         @Nullable Bundle savedInstanceState) {

    View listView = inflater.inflate(R.layout.fragment_home,container,false);
    if(getArguments()!= null){
        bundle = getArguments()
        String myMonth = bundle.getString("mymonth");
     } else {  
        Toast.makeText(getActivity(),
                "lolol",
                Toast.LENGTH_SHORT)
                .show();
     }
    return listView;
}
0
DHAVAL ASODARIYA 4 nov. 2019 à 06:01

Vous vous trompez, ne correspond pas à la vue spinner et obtenez l'élément sélectionné. C'est la mauvaise façon de faire.

Obtenez à partir de la fonction de rappel onItemSelected (). Vous obtiendrez l'adaptateur et la position.

 ArrayAdapter adapter = new ArrayAdapter(//Set the values);     
 spinner.adapter = adapter

 @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l){
        String dateName = adapter.getItem(i) ;
        **(OR String dateName = adapterView.getAdapter().getItem(i).toString())** 
        Bundle bundle = new Bundle();
        if(dateName != null)
            bundle.putString("myMonth", dateName);
        HomeFragment homefrag = new HomeFragment();
        homefrag.setArguments(bundle);
        FragmentManager fragManager = getSupportFragmentManager();
        fragManager.beginTransaction().replace(R.id.fragment_container,homefrag).commit();
}

onCreateView of HomeFragment

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View ListView = inflater.inflate(R.layout.fragment_home,container,false);
    Bundle bundle = this.getArguments();
    if(bundle !=null && bundle.containsKey("myMonth"))
       String myMonth = bundle.getString("myMonth"); 
    return ListView;
}

Utilisez la clé comme globale, elle peut être déclarée et récupérée différemment. Mieux utiliser la clé dans la déclaration globale

0
SURYA N 4 nov. 2019 à 06:17

Essayez le code ci-dessous dans votre HomeFragment

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle bundle = getArguments();
    if (bundle != null) {
        String myMonth = bundle.getString("mymonth");
    }
}
0
Vishrut Mavani 4 nov. 2019 à 07:04

Ici, vous devez vérifier que getArguments () est nul ou non. se référer au code ci-dessous,

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable 

ViewGroup container, @Nullable Bundle savedInstanceState) {
            View ListView = inflater.inflate(R.layout.fragment_home,container,false);
            if(this.getArguments()!=null){
             bundle = this.getArguments()
                if(bundle == null){
                   Toast.makeText(getActivity(),
                        "lolol",
                        Toast.LENGTH_SHORT)
                        .show();
                 }else{
                     String myMonth = bundle.getString("mymonth");
                 }
           }else{
            // else part Here
           }

            return ListView;
        }
0
Ronak Patel 4 nov. 2019 à 05:54