フラグメント化されたレイアウトに問題があり、以前に答えられていて、それを見つけられなかった場合は誠に申し訳ありません。私は何時間も捜して何も得ていませんでした(よく、私は多くを得ましたが、何も私の問題を解決しませんでした)。プログラムで追加されたキーが戻ってきたフラグメントが空のコンテナにつながる
私の設定は次のとおりです。2つのFrameLayoutsをフラグメントのコンテナとして使用する2つのペインレイアウトがあります。 activity_listing.xml:
<FrameLayout android:id="@+id/listing" />
<FrameLayout android:id="@+id/details" />
(フラグメントの活動でのonCreate)アプリを開くと、リストと呼ばれる断片が、「リスト」でframeLayoutに追加され、プログラムFragmentTransactionを使用。
public class ListingActivity extends FragmentActivity
implements ListingFragment.Callbacks {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listing);
// Displaying the first listing here ...
Fragment fragment = new ListingFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.listing, fragment);
ft.addToBackStack(null);
ft.commit();
...
}
このListingFragment
は、実行時に数回交換しているので、私はXMLで定義するのではなく、それを作成する必要があります。私は<fragment android:name="com.example.app.ListingFragment" />
後者を試みたが、それは置き換えられません以降のプログラムで削除します。私は追加することしかできず、古いものは新しいものを通して見ることができます。しかし、それはここで問題ではありません - 私の方法の説明だけです。
これまでのところ、これはすべて動作するはずです。リストは作成されて表示されるなど、問題はありません。しかし:
リストファクトリが起動時に表示され、バックキーを押すと、最後の位置でFrameLayout "listing"がホーム画面に戻るのではなく空になります!私はそれがある必要があると考えました。なぜなら、私のListActivityのonCreateは、空のフレームを表示し、ListFragmentをadd()するためです。したがって、バックスタックにも空のフレームがあります。右?
私はListingActivityに、このような状況での解決を試みた:
@Override
public void onBackPressed() {
super.onBackPressed();
if(getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
}
}
しかし、どういうわけかそれはそれは周りの悪い仕事のように見える...見えるか右に感じることはありません。
空のFrameLayoutを持つビューを膨張させて「戻る」ための空の状態がないようにする前に、フラグメントを挿入する方法はありますか?または、空の状態をバックスタックから削除することは可能ですか? "バック"を打った後に空のフレームを避ける方法に関する他のアイデア?
ご協力いただきありがとうございます。
onCreateの追加トランザクションから「ft.addToBackStack(null)」を削除してみます。 onbackpressedで何もする必要はありません。 – toadzky
あなたは正しいです!完璧!私はそれを正しいものとしてマークすることができますので、答えとして投稿してください。私は今、少しばかげている気がします... –