6

私の Android アプリケーションには、2 つの別個の関連するトップレベルの画面 / アクティビティがあります。それらに 2 つの個別のランチャー アイコンを用意したいのですが、ViewPager の場合と同様に、ユーザーがそれらの間を「スワイプ」できるようにします。

私が見るオプションは次のとおりです。

  1. 2 つの別個のアクティビティを実装し、それらの間でスワイプできるようにします。問題は、ViewPager を 2 つの別々のアクティビティで使用できないことです。

  2. 2 つのフラグメントを持つ単一のアクティビティを実装し、ViewPager を使用してそれらを切り替えます。スワイプは簡単ですが、正しいフラグメントに自動的に切り替わるランチャーを 2 つ持つことは可能ですか?

上記の2つのオプションのいずれかが実行可能ですか、または他に試すことができるものはありますか?

4

4 に答える 4

2

解決策2を試しましたが、問題は、使用されたランチャーアイコンを1つのアクティビティで検出できないことです(間違っている場合は教えてください)。

私の解決策は、2つの「ダミー」アクティビティを追加して、正しい「ページ」番号を持つメインアクティビティを起動することでした。このアプローチの難しさは、タスクスタックを適切に処理することです。ランチャーを選択すると、ダミーアクティビティを起動し、メインアクティビティにインテントを送信する必要があります。Androidは、これを防ぐために本当に一生懸命努力し、最後のアクティビティを再び前面に出します。

これは私が思いつくことができる最高のものです:

ダミーアクティビティ(LaunchActivity2と同様):

public class LaunchActivity1 extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent newIntent = new Intent(this, MainActivity.class);
        newIntent.putExtra(MainActivity.EXTRA_PAGE, 1);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(newIntent);
        finish();
    }
}

主な活動:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    ViewPager viewPager = (ViewPager)findViewById(R.id.MainViewPager);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));

    int page = getIntent().getIntExtra(EXTRA_PAGE, -1);
    if(page >= 0 && page <= NUM_ITEMS)
        viewPager.setCurrentItem(page);
}

public void onNewIntent(Intent intent) {
    if(intent.hasExtra(EXTRA_PAGE)) {
        int page = intent.getIntExtra(EXTRA_PAGE, -1);
        ViewPager viewPager = (ViewPager)findViewById(R.id.MainViewPager);
        if(page >= 0 && page <= NUM_ITEMS)
            viewPager.setCurrentItem(page);
    }
}

AndroidManifest.xml:

    <!-- LaunchActivity2 is similar -->
    <activity android:name=".LaunchActivity1" android:label="Launch 1"
              android:clearTaskOnLaunch="true"
              android:noHistory="true"
              android:taskAffinity="Launch1"
              android:theme="@android:style/Theme.Translucent.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name=".MainActivity"
              android:label="My App"
              android:clearTaskOnLaunch="true"
              android:finishOnTaskLaunch="true"
              android:launchMode="singleTask"
              android:taskAffinity="MyApp">
    </activity>

さまざまなタスクアフィニティの問題は、両方のランチャーとメインタスクが[最近のアプリケーション]リストに表示されることです。

このアプローチを他の人にはお勧めしません。むしろ、単一のランチャーアイコンを使用するだけです。

于 2011-10-29T14:25:38.660 に答える
1

解決策1:毎回他のアクティビティを開始するという点でスワイプできます。この場合、「スワイプ」効果を得るには2つのアクティビティの遷移アニメーションを修正し、タスクに複数のインスタンスがないように2つのアクティビティをSingleTaskとして設定する必要があります(したがって、onNewIntent()メソッドを実装する必要があります) 。

解決策2:そうです。これは可能です。ランチャーアイコンに基づいて、毎回適切なフラグメントを開始して表示してから、スワイプを使用してビューを変更する必要があります。

お役に立てれば!

于 2011-10-29T10:40:59.337 に答える
0

これが古いことは知っていますが、同じ問題を探したときに最初にたどり着いた質問です。

そこで解決策を見つけることができます: ViewPager for multiple Activities、 use Fragments ... (以前のバージョンの Android で実行する必要がある場合は、サポート ライブラリにもあります)

于 2012-10-03T01:27:20.923 に答える