我有2个数组,我试图循环,然后打包作为一个对象,并将其发送到另一个片段,作为一个包检索,然后访问该包,但我得到一个空指针。
在片段1中,我有以下方法:
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;
}
然后在Fragment 2中,我按如下方式检索循环问题对象:
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;
}
当我尝试从包中访问QuestionID时,使用question = (Question) getArguments().get("QuestionID");
它会抛出一个空指针。
根据我的阅读,我觉得这是正确的,但我显然错过了一些东西。谁能指出我正确的方向?
提前致谢。
答案 0 :(得分:1)
您可能需要发布更多代码来修复所有问题,因为似乎有一些问题。但是我在这里看到的一个大问题是你试图实例化一个Activity,而不是使用Android系统来为你做。在newInstance方法中,您需要更改它以创建Android操作系统用于启动活动的意图。因此,您需要将newInstance方法更改为:
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;
}
然后你需要从当前开始那个活动才能看到它:
startActivity(ViewPagerFragmentActivity.newIntent(this, question));
我不确定你在循环中尝试做什么,可能需要更多信息来解决你想要做的事情。
答案 1 :(得分:0)
补充@tim.paetz回答,你正在尝试将一个字符串转换为一个Question对象,因为你已经在你的意图中放了一个字符串:
bdl.putString("QuestionID", question.getQuestionNumber());
因此,在您的情况下,获取对象的正确方法与您所做的不同:
question = (Question) getArguments().get("QuestionID");
但其中一种方法可以是:
String questionId = getArguments().getString("QuestionID");
Question question = //find in the database with this id