2つのフラグメントを含む単純なレイアウトがあります。2つのフラグメントの1つは定期的に置き換えられ、もう1つは使用している間ずっと一貫性が保たれます。何らかの理由で、削除/追加は問題なく機能しますが、置き換えると他のフラグメントが消えます。デバッグコードから、明らかな理由もなく、フラグメントが単に切り離されることがわかります。なぜこれなのか?後者を使用する場合は、QuestionAreaが最初になくなるように細心の注意を払う必要があります...
これらのコード行は、FragmentActivityクラスのから来ています。
fragManager.beginTransaction()
.replace(R.id.QuestionArea, getQuestionPostView(), "QuestionArea")
.commit();
fragManager.beginTransaction()
.remove(fragManager.findFragmentById(R.id.QuestionArea))
.add(R.id.QuestionArea, getQuestionPostView(), "QuestionArea")
.commit();
これが私が望む他の関連するコードです:
メインディスプレイのXML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical" >
<com.pearsonartphoto.FontFitTextView
android:id="@+id/Name"
style="@style/bigText"
android:background="@color/blue"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>
<TextView android:id="@+id/Instructions"
style="@style/medText"
android:layout_width="fill_parent"
android:layout_below="@id/PowerName"
/>
<fragment
android:name="com.pearsonartphoto.NumberDisplay"
android:gravity="center"
android:id="@+id/QuestionArea"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/Instructions"/>
<fragment
android:name="com.pearsonartphoto.AbstractAnswerFragment"
android:id="@+id/AnswerArea"
style="@style/bigText"
android:gravity="center"
android:layout_below="@+id/QuestionArea"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_height="530sp"/>
</RelativeLayout>
AnswerAreaを設定するFragmentActivityの一部
protected void setAnswerPad(AbstractAnswerFragment pad)
{
fragManager.beginTransaction()
.replace(R.id.AnswerArea, pad, "AnswerArea")
.commit();
fragManager.executePendingTransactions();
answerPadToAnswer=pad.getAnswerKey();
}
初めて(FragmentActivityから)QuestionAreaが設定されます。
fragManager.beginTransaction()
.replace(R.id.QuestionArea, getQuestionPreView(), "QuestionArea")
.commit();
関数getPostView()およびgetPreView()
@Override
Fragment getQuestionPreView() {
NumberDisplay display=(NumberDisplay)manager.findFragmentById(R.id.QuestionArea);
display.setNumber(-1);
return display;
}
@Override
Fragment getQuestionPostView() {
NumberDisplay display=(NumberDisplay)manager.findFragmentById(R.id.QuestionArea);
display.setNumber(answer);
return display;
}