如何将对象循环到片段并检索bundle

时间:2017-10-03 19:16:40

标签: android android-fragments android-bundle

我有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");它会抛出一个空指针。

根据我的阅读,我觉得这是正确的,但我显然错过了一些东西。谁能指出我正确的方向?

提前致谢。

2 个答案:

答案 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