2012-10-16 7 views
9

フラグメント化されたレイアウトに問題があり、以前に答えられていて、それを見つけられなかった場合は誠に申し訳ありません。私は何時間も捜して何も得ていませんでした(よく、私は多くを得ましたが、何も私の問題を解決しませんでした)。プログラムで追加されたキーが戻ってきたフラグメントが空のコンテナにつながる

私の設定は次のとおりです。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を持つビューを膨張させて「戻る」ための空の状態がないようにする前に、フラグメントを挿入する方法はありますか?または、空の状態をバックスタックから削除することは可能ですか? "バック"を打った後に空のフレームを避ける方法に関する他のアイデア?

ご協力いただきありがとうございます。

+2

onCreateの追加トランザクションから「ft.addToBackStack(null)」を削除してみます。 onbackpressedで何もする必要はありません。 – toadzky

+0

あなたは正しいです!完璧!私はそれを正しいものとしてマークすることができますので、答えとして投稿してください。私は今、少しばかげている気がします... –

答えて

11

フラグメントをonCreateに追加すると、ft.addToBackStack(null)を呼び出さないでください。それは、あなたが戻ってジャンプすることができたいその断片の前に別の状態を持っていることをFragmentMangerに伝えます。

関連する問題