起初的问题是 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] 删除。
我来说两句