0

複数のアクティビティを含むアプリがあり、それぞれが複数のフラグメントを使用する場合があります。

1 つのアクティビティ (IBAsTabsActivity と呼ばれる) は SherlockFragmentActivity を拡張し、選択されたタブに応じて異なるフラグメントが読み込まれるサンプル コードを使用しています。考えられるフラグメントの 1 つは「SearchableListFragment」と呼ばれます。これはすべて正常に機能しています。IBAsTabsActivity に移動するボタンと AnAlternativeActivity に移動するボタンの 2 つのボタンを持つ「ホーム」アクティビティがあります。ボタンを押して IBAsTabsActivity に移動し、いくつかのタブを表示すると、戻るボタンを押すと、「ホーム」にまっすぐジャンプします。

ここで、AnAlternativeActivity を起動して実行したいと考えています。タブがないため、Sherlock コードは使用されていません。代わりに私はこれを持っています:

public class AnAlternativeActivity extends FragmentActivity implements OnClickListener
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.blank_fragment_holder);

        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        SearchableListFragment fb = new SearchableListFragment();
        ft.replace(R.id.fragment_holding_layout, fb);
        ft.addToBackStack("replacingFragmentA");
        ft.commit();
}

これはすべて、ホーム画面のボタンをクリックして AnAlternativeActivity を呼び出す場合と同じように正常に機能し、SearchableListFragment() (fragment_holding_layout 内) とその内容が正しく表示されます。しかし、戻るボタンをクリックすると、fragment_holding_layout 内のフラグメントは消えますが、AnAlternativeActivity は実行されたままになります。AnAlternativeActivity を終了してホーム アクティビティに戻るには、戻るボタンをもう一度押す必要があります。

おそらく、この問題を解決するためにいくつかの醜いコードを作成できますが、このシナリオに対処する標準的な方法があると思います。何か案は?

4

3 に答える 3

2

親アクティビティの概念を使用して、これを簡単に解決できるはずです。AndroidHomeActivityがあなたの親であることを伝えるだけAnAlternativeActivityで、ナビゲーションはあなたによって処理されます。ファイルに次のような属性をAndroidManifest.xml追加します。android:parentActivityNameAnAlternativeActivity

<activity
    android:name="com.mick.AnAlternativeActivity"
    android:label="@string/activity_title"
    android:parentActivityName="com.mick.HomeActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.mick.HomeActivity" />
</activity>

新しいデバイスには通常の属性が必要であり、古いデバイスにはメタデータ タグが必要です。詳細については、http: //developer.android.com/training/basics/firstapp/starting-activity.htmlを参照してください( [マニフェストの小見出しに追加] を参照)。

于 2013-05-22T19:12:48.330 に答える
0

ft.addToBackStack("replacingFragmentA");「戻る」を 2 回タップする必要があるのは、あなたの呼び出しが原因のようです。トランザクションをバック スタックに追加すると、その効果が得られます: 履歴スタックにレイヤーが追加されます。

そのため、最初に「戻る」を押すと、そのトランザクションはいわば「元に戻す」ことになり、あなたSearchableListFragmentR.id.fragment_holding_layout. 2 回目に「戻る」を押すと、AnAlternativeActivity後ろから「ホーム」アクティビティに移動します。

于 2013-09-02T23:54:12.097 に答える
0

AnAlternativeActivity の onPause 内で呼び出しfinish()て終了することができます。

public void onPause() {
    super.onPause();
    finish();
}
于 2013-05-22T19:02:37.113 に答える