18

ファイルマネージャーのようなことをしようとしています。アクションバーでは、「Google ドライブ」アプリのようにフォルダ ナビゲーションを行いたいと考えています。最後から番号で前のアクティビティに移動できるメソッドを作成するか、このようなものが必要です。

例:

したがって、スタックがある場合: [1] -> [2] -> [3] -> [4] -> [5]

2 番目に移動する必要があるため、スタックから [3]、[4]、および [5] を削除して [2] に移動する必要があります。

すべてのアクティビティは 1 つのクラス ContentActivity.java です。

どのように行うことができますか?

アップデート:

アクティビティを開始する方法をいくつかコードします。

public class ContentActivity extends Activity implements AdapterView.OnItemClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        Intent intent = getIntent();
        String folderToOpen = intent.getStringExtra("folderName");
        fillList(folderToOpen);
    }


    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        ...
        Intent intent = new Intent(ContentList.this, ContentList.class);
        intent.putExtra("folderName", item.getName());
        startActivity(intent);
    }
}
4

4 に答える 4

33

Activity2それがあなたが行きたい2番目の活動であると仮定すると、

これを試して:

Intent intent = new Intent(this,Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

AndroidのドキュメントによるとFLAG_ACTIVITY_CLEAR_TOP

設定されていて、起動されているアクティビティが現在のタスクで既に実行されている場合、そのアクティビティの新しいインスタンスを起動する代わりに、その上にある他のすべてのアクティビティが閉じられ、このインテントがに配信されます (現在上)新しいインテントとしての古いアクティビティ。

于 2014-05-23T10:13:58.797 に答える
12

マニフェスト属性によるアクティビティのスキップ

必要に応じて異なりますが、単純にバック フローでアクティビティをスキップしたい場合は、このアクティビティをマニフェストの履歴から削除すると便利です。

[1] -> [2] -> [3] - 通常の流れ

[1] <- [3] - 逆流

[2]アクティビティでは、マニフェストで noHistory 属性を設定できます

<activity
android:name=".SecondActivity"
android:noHistory="true" />

このアプローチのおかげで、[2] アクティビティがバックフローで起動されることはありません。


インテント フラグを使用

履歴スタックからアクティビティを削除することは、常に良い考えとは限りません。たとえば、アクティビティをバックフローにする必要がある場合とそうでない場合がある場合、目的のアクティビティを起動するには、意図的にフラグを設定する必要があります。

Intent intent = new Intent(this, FirstActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

そして非常に重要- FirstActivityマニフェストでは、起動モードをsingleTopに設定します。

<activity
   android:name=".FirstActivity"
   android:launchMode="singleTop" />

launchMode 属性がないと、アクティビティが再作成されます。

于 2017-01-28T13:24:48.653 に答える