1

カスタムランチャーを実装しています。私は2つのアクティビティを持っています.launchModeのアクティビティA:singleInstanceまたはsingleTask、およびアクティビティB.

アクティビティ A がメイン画面です。2 つのケースがあります。

  • アクティビティ A の launchMode : singleTask を設定した場合、アクティビティ A からアクティビティ B を呼び出します (問題ありません)。アクティビティBで、ホームキーを押してメイン画面に戻ると、画面が空になります(何もありません...)。
  • アクティビティ A の launchMode : singleInstance を設定した場合、アクティビティ A からアクティビティ B を呼び出すと、アクティビティ B に移動した後に空白の画面が表示されます (この場合、ホーム キーを押してメイン画面に戻ると、正常に動作します)。

では、これを解決するにはどうすればよいでしょうか。私が欲しい:アクティビティAからアクティビティBを呼び出してから、アクティビティBに直接行き、ホームキーを押すとメイン画面(アクティビティA)に戻ります。

4

2 に答える 2

1

アクティビティ B では、戻るボタンで次のコードを使用できます

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        Intent a = new Intent(this,A.class);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(a);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}     

次のコードでホームキーをオーバーライドするよりもホームキーを使用したい場合

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
       if(keyCode == KeyEvent.KEYCODE_HOME)
        {
          //yours code action
return true;
        }
       if(keyCode==KeyEvent.KEYCODE_BACK)
       {
           //yours code action
return true;
       }
      return super.onKeyDown(keyCode, event);
    }

これも試してみてください

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {

        if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
            //yours code
            return true;
        }
        else
            return super.dispatchKeyEvent(event);
    }
于 2014-01-13T03:20:09.743 に答える
0

これを試してください...マニフェストからlaunchmode属性を削除してから、次のようにfinish()メソッドを使用してアクティビティAからアクティビティBを呼び出します。

finish();
            Intent intent=new Intent(getApplicationContext(),ActivityB.class);
            startActivity(intent);
于 2014-01-13T06:50:48.070 に答える