0

3 つのアクティビティ、つまり - スプラッシュ スクリーン - アクティビティ A - アクティビティ B、および - アクティビティ C で構成される新しいアプリケーションを構築しています。

アクティビティから ユーザーは、以下に示す両方のアクティビティに移動できます。

A -> B -> C (アクト A から、ユーザーは B に移動してから C に移動できます)。A -> C (アクト A からユーザーは C に直行できます)。B -> C (B ユーザーから C に移動できます)。

また、アクティビティ間で Serializable インテント Extra を渡します。

私が抱えている問題は、アクション バー (左上隅) の戻るボタンを押すたびに、常にアプリがクラッシュすることです (エラー: NULL ポインター例外)。

このコードをすべてのアクティビティに配置しようとしました。

@Override
public void onBackPressed() {
    this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
}

ユーザーが物理的な戻るボタンを押したときに機能するため、物理的な戻るボタンの動作を何とか模倣しようとしました。しかし、多少エラーもスローされます。

また

public void onBackPressed(){
  super.onBackPressed();
}

または(これは文字通りアプリを再起動しますが、スプラッシュ画面からアプリを再起動するのでお勧めできません)。

public void onBackPressed(){
  super.onBackPressed();
  finish();
}

戻るボタンを実装する適切な方法を知っている人はいますか?

4

4 に答える 4

7

左上隅のボタンは「戻る」ボタンではなく、「上へ」ボタンであり、アクションバーの単なるボタンです。onBackPressed は、ハードウェアの戻るボタンが押されていることを示します。back と up のナビゲーションは必ずしも同じではありません (「back」は前にいた場所に移動することを意味し、「up」はアプリ階層の上位レベルに移動することを意味します)。詳細については、http://developer.android.com/design/patterns/navigation.htmlをご覧ください。

(また、スプラッシュ スクリーンを避けるようにしてください。Android のデザイン パターンでは非常に推奨されません)。

編集:「上」ボタンを実際に処理する方法について言及するのを忘れていました。アクティビティの onOptionsItemSelected でそれを行います。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        // Handle "up" button behavior here.
        return true;
    } else {
        // handle other items here
    }
    // return true if you handled the button click, otherwise return false.
}
于 2013-09-13T18:53:17.460 に答える
1

問題は、インテントを使用して値を渡すことにあると思います。値がすべてのアクティビティで使用されることを意図している場合、最善の方法は sharedpreferences を使用することだと思います。

于 2013-09-13T08:48:52.173 に答える
1

戻るボタンが呼び出されたときに、このようなことができます

public void onBackPressed(){
    // Add data to your intent
    finish();
    startActivity(intent);
}

onClickアクションバーボタンの方法も同様です。

于 2013-09-13T08:36:26.687 に答える