2017-10-03 5 views
0

J'ai 2 tableaux que j'essaye de boucler, puis je les empaquette en tant qu'objet et je l'envoie à un autre fragment pour être récupéré en bundle, puis j'accède à ce paquet, mais je Je reçois un pointeur nul.Comment boucler un objet pour le fragmenter et récupérer le paquet

Dans Fragment 1, j'ai la méthode suivante:

public Fragment getQuestionFragments(String[] array_id, String[] array1) { 

     int count = 0; 

     for (String x : array_id) { 

      Question question = new Question(); 
      question.setQuestionNumber(x); 
      question.setQuestion(array1[count]); 
      question_list.add(question); 
      count++; 

      ViewPagerFragmentActivity.newInstance(question); 

     } 

     goToQuestions(); 

     return null; 
    } 

Puis, dans Fragment 2 je récupérer la boucle sur l'objet question suivante:

public static ViewPagerFragmentActivity newInstance(Question question) 
    { 
     ViewPagerFragmentActivity f = new ViewPagerFragmentActivity(); 
     Bundle bdl = new Bundle(2); 
     bdl.putString("QuestionID", question.getQuestionNumber()); 
     bdl.putString("QuestionString", question.getQuestionString()); 
     f.setArguments(bdl); 
     return f; 
    } 

Lorsque je tente et accéder à l'QuestionID de le bundle, en utilisant question = (Question) getArguments().get("QuestionID"); il jette un pointeur nul. D'après ce que j'ai lu, j'ai trouvé que c'était correct, mais il me manque manifestement quelque chose. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Merci d'avance.

Répondre

1

Vous devrez probablement poster plus de code pour résoudre tous les problèmes car il semble y en avoir quelques-uns. Mais le gros problème que je vois ici est que vous essayez d'instancier une activité, plutôt que d'utiliser le système Android pour le faire pour vous. Dans votre méthode newInstance, vous devez la modifier pour créer une intention que le système d'exploitation Android utilise pour lancer votre activité. Donc, vous devez changer votre méthode de newInstance être comme ceci:

public static Intent newInstance(Context context, Question question) 
{ 
    Intent intent = new Intent(context, ViewPagerFragmentActivity.class); 
    intent.putString("QuestionID", question.getQuestionNumber()); 
    intent.putString("QuestionString", question.getQuestionString()); 
    return intent; 
} 

Ensuite, vous devez commencer cette activité de votre actuelle afin de le voir:

startActivity(ViewPagerFragmentActivity.newIntent(this, question)); 

Je ne sais pas ce que vous essayez de faire dans votre boucle et plus d'informations sont probablement nécessaires pour résoudre tout ce que vous essayez de faire avec cela.

0

Complétant @tim.paetz réponse, vous essayez convertir une chaîne à un objet Question, parce que vous avez putte une chaîne dans votre intention:

bdl.putString("QuestionID", question.getQuestionNumber()); 

Donc, dans votre cas, la bonne façon d'obtenir l'objet est comme vous l'avez fait:

question = (Question) getArguments().get("QuestionID"); 

Mais l'une des nombreuses façons peut être:

String questionId = getArguments().getString("QuestionID"); 
Question question = //find in the database with this id