11

私のアクティビティでは、アクション バーには左矢印とアクティビティのタイトルのみが表示されます。

左矢印を押すと、アクティビティは前のアクティビティに戻りますが、onKeyUp、OnkeyDown、および OnBackPressed メソッドにイベントは登録されません。

しかし、電話の [戻る] キー (一番下) を押すと、アクティビティは前のアクティビティに戻り、すべてのメソッド onKeyUp、OnKeyDown、および OnBackPressed がイベントを (logcat に) 登録します。

その左矢印をキャプチャするにはどうすればよいですか (UP ボタンと呼ばれていると思います)。

キーを取得する必要があるのは、 onPause メソッドで、アクティビティがシステムではなくユーザーによって破棄されたことを知るためです (たとえば、ユーザーが別のアクティビティに切り替えた場合)。

さらに調査したところ、UP ボタンが onOptionsItemSelected メソッドによってキャプチャされたイベントを発生させることがわかりました。メニューには他のボタンがないため、このボタンであることがわかりました。

4

2 に答える 2

11

http://developer.android.com/guide/topics/ui/actionbar.html#Handlingを参照してください

アクション アイテムのクリックの処理

ユーザーがアクションを押すと、システムはアクティビティの onOptionsItemSelected() メソッドを呼び出します。このメソッドに渡された MenuItem を使用して、getItemId() を呼び出してアクションを識別できます。これにより、タグの id 属性によって提供される一意の ID が返されるため、適切なアクションを実行できます。例えば:

@Override 
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items 
    switch (item.getItemId()) {


        case android.R.id.home:
            onUpButtonPressed(); 
            return true; 



        case R.id.action_search:
            openSearch(); 
            return true; 
        case R.id.action_compose:
            composeMessage(); 
            return true; 
        default: 
            return super.onOptionsItemSelected(item);
    } 
} 

注: Fragment クラスの onCreateOptionsMenu() コールバックを介してフラグメントからメニュー項目をインフレートする場合、ユーザーがそれらの項目の 1 つを選択すると、システムはそのフラグメントに対して onOptionsItemSelected() を呼び出します。ただし、アクティビティは最初にイベントを処理する機会を得るため、システムは最初にアクティビティで onOptionsItemSelected() を呼び出してから、フラグメントに対して同じコールバックを呼び出します。アクティビティ内のフラグメントにもコールバックを処理する機会があることを確認するには、項目を処理しない場合に false を返すのではなく、常に既定の動作として呼び出しをスーパークラスに渡します。

アプリ アイコンをアップ ボタンとして有効にするには、setDisplayHomeAsUpEnabled() を呼び出します。例えば:

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

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    ... 
} 
于 2015-08-06T23:25:55.727 に答える
4

はい、その通りです。onOptionsItemSelected メソッドで上ボタンが押されたかどうかを検出できます。これはうまくいくはずです:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
    // Do something here. This is the event fired when up button is pressed.
    return true;
}
return super.onOptionsItemSelected(item); 
}
于 2015-08-06T23:24:26.030 に答える