onCreateView 不会在 Fragment 中触发

萨桑

起初的问题是 getView() 在我的片段中总是返回 null 。正如其他人提供的那样,我在 onCreateView 中使用了一个视图来获得这样的视图:

     private  View vv ;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    vv = inflater.inflate(R.layout.fragment_exam_page2, container, false); ;
    return  vv ;

}

所以我可以使用 vv 而不是 getView() 。但现在我看到 onCreateView 根本没有被调用!在我的活动中,我这样做:

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    TwoLineOptionsFragment twoLineOptionsFragment = new TwoLineOptionsFragment();
            transaction.replace(R.id.fragment_answerContainer, twoLineOptionsFragment).commit();

            twoLineOptionsFragment.updateOptions(question.AnswerOptions) ;// my public function doing stuff ... 

那么问题出在哪里呢?

编辑:如果重要,这是我的功能:

    public  boolean updateOptions(ArrayList<Exam.Question.Answer> answers)
    {
    try
    {


        QuestionOptionView optionView = (QuestionOptionView)(vv.findViewById(R.id.option1)) ;
        //QuestionOptionView optionView = (QuestionOptionView)(getView().findViewById(R.id.option1)) ;
        optionView.setText(answers.get(0).AnswerText);
    return reue ;
    }
    // ... 
    }
达利什

Fragment 的 onCreateView() 将始终被调用。您的情况的问题是您试图在调用 onCreateView() 之前访问视图对象。以下内容过早执行。

 twoLineOptionsFragment.updateOptions(question.AnswerOptions) ;

不要Fragment直接从 Activity调用方法,因为您可能不确定它Fragment是否准备就绪。您应该将您的逻辑移动到Fragment类本身并提供回调,Activity以便您可以将结果传递回活动。

在您的情况下,您可以将answers.get(0).AnswerText值作为参数传递给 Fragment 并将其显示在 TextView 上。欢呼:)

TwoLineOptionsFragment f = new TwoLineOptionsFragment();
Bundle args = new Bundle();
args.putString("arg", answers.get(0).AnswerText);
f.setArguments(args);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章