0

OptionsMenuのクリック時間を取得できますか?

このように、onReceiveで使用する価値を取得したい

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        SubMenu fileMenu = menu.addSubMenu(0, 7, Menu.NONE, "歌曲");    
        fileMenu.add(0, 1, Menu.NONE, "A");  
        fileMenu.add(0, 2, Menu.NONE, "B");  
        fileMenu.add(0, 3, Menu.NONE, "C");
        fileMenu.add(0, 4, Menu.NONE, "D");
        return true;
    }
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 1:

              Toast.makeText(this, "A", Toast.LENGTH_SHORT).show();
              break;
        case 2:

              Toast.makeText(this, "B", Toast.LENGTH_SHORT).show();
              break;
        case 3:

              Toast.makeText(this, "C", Toast.LENGTH_SHORT).show();
              break;
        case 4:
              Toast.makeText(this, "D", Toast.LENGTH_SHORT).show();
              break;
        default:
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
IntentFilter intent = new IntentFilter();  
intent.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(searchDevices, intent);
private BroadcastReceiver searchDevices = new BroadcastReceiver() {  
      public void onReceive(Context context, Intent intent) { 
        if(OptionsMenu click times == 2)
    {

    }
}

私はこの部分だけのプロセスを持っているので、

解決方法を理解するのを手伝ってくださいアドバイスを提供してくださいありがとう

4

2 に答える 2

0

あなたが与えた詳細から:

アクティビティにデータメンバーを作成できます。このデータメンバーには、メニューキーが押された回数が保存され、押されるたびに増加します。

private int menuPressedCount = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_MENU)
        menuPressedCount++;
}

そして、これをレシーバーに渡して、レシーバーが取得するインテントに入れることができます。

Intent intent = ...;
intent.putExtra("menu_pressed_count", menuPressedCount);

そしてonReceive()で:

int pressedCount = intent.getIntExtra("menu_pressed_count", 0);

これがあなたが探しているものではないかどうか教えてください!

于 2012-09-27T18:12:45.173 に答える
0

バリはあなたが尋ねたことに対して良い解決策を与えました。しかし、レシーバーを使用せずにこれを行うためのはるかに簡単な方法があります。

クリック数の静的コンテナを持つ新しいクラスを作成します。

すなわち:

public class ParamValues{

private static int clickNums= 0;

    /**
     * @return the clickNumber
     */
    public static int getClickNums() {
        return clickNums;
    }

    /**
     * Sets the clickNumber
     */
    public static int setClickNum(int clickNum) {
        clickNums = clickNum;
    }
}

次に、OptionsMenuのonClickHandlerを作成し、クリックハンドラー内にのようなコードを追加します。

int count = ParamValues.getClickNum();
count++;
ParamValues.setClickNum(count);

これで、コード内のどこでもこのクリック数を取得できます。同期されていることを確認したい場合は、同じonClickで必要なものを処理する関数を追加するだけです。

すなわち:

if(ParamValues.getClickNum() == 2)
    {
// Do whatever
    }

次に、ParamValuesクラスの便利なセッターを使用して、ここまたはリセットしたい場所でカウント値をリセットできます。

レシーバーを使用すると、コードがいつ実行されるかを正確に保証することはできません。

于 2012-09-27T18:45:03.013 に答える