レイアウトの断片化に問題があります。以前に回答されたことがあり、愚かすぎて見つけられなかった場合は、心からお詫び申し上げます。私は何時間も検索して何も得られませんでした(まあ、私はたくさん得ましたが、何も私の問題を解決しませんでした)。
これが私の設定です。フラグメントのコンテナとして2つのFrameLayoutを使用する2つのペインのレイアウトがあります。activity_listing.xml:
<FrameLayout android:id="@+id/listing" />
<FrameLayout android:id="@+id/details" />
アプリを開くと(フラグメントのアクティビティでonCreate)、FragmentTransactionを使用してプログラムでListingというフラグメントがFrameLayoutの「リスト」に追加されます。
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" />
ただし、後でプログラムで置き換えたり削除したりすることはありません。add()しかできないので、古いものが新しいものを通して見えます。しかし、それはここでは問題ではありません-私のやり方の説明にすぎません。
これまでのところ、これはすべて正常に機能し、リストが作成および表示されるなど、問題はありません。だが:
起動時にListingFragmentが表示され、戻るキーを押すと、最後の位置で、ホーム画面に戻る代わりに、FrameLayoutの「リスト」が空になります。私のListingActivityのonCreateが空のフレームを表示し、それにListingFragmentを追加するためである必要があると考えました。したがって、バックスタックにも空のフレームがあります。右?
私はこれによってListingActivityに状況を解決しようとしました:
@Override
public void onBackPressed() {
super.onBackPressed();
if(getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
}
}
しかし、どういうわけかそれは正しく見えないか、感じられません...それは悪い回避策のように見えます。
それで、空のFrameLayoutを持つビューが膨らむ前にフラグメントを挿入して、「戻る」ための空の状態がないようにする方法はありますか?または、バックスタックにない場合でも、バックスタックから「空の」状態を削除することは可能ですか?「戻る」を押した後に空のフレームを回避する方法に関する他のアイデアはありますか?
よろしくお願いします!