0

私のAndroidアプリケーションでは、カスタムビューを使用してアクティビティのビューとしてロードしました。次に、ユーザーがメニューボタンをクリックしたかどうかを検出したいと思います。次のコードでシナリオが説明されることを願っています。

私のカスタムビュークラス:

 public class LibraryHomeView extends LinearLayout implements OnKeyListener {
//variable dec goes here..
public LibraryHomeView(Context context, AttributeSet attrs) {
    super(context, attrs);  

    init(context,attrs);
}

private void init(Context con,AttributeSet att) {
    //custom view implementation goes here...
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
         Log.d(TAG, "KeyEvent.KEYCODE_MENU");
            return true;
        }

}

私の問題は、アクティビティクラスからこのイベントをキャプチャしたくないのですが、ビュークラスからこれをキャプチャしたいのですが、メニューキーを押してもメソッドに到達しませんOnKey()

4

2 に答える 2

0

これを試して、

public boolean onKeyUp(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_MENU) {
        // do something...
   }
    return true;
   }

編集

public class LibraryHomeView extends LinearLayout {

     public LibraryHomeView(Context context) {
     super(context);
     // TODO Auto-generated constructor stub
   setFocusable(true);
  }
于 2012-07-10T06:24:38.127 に答える
0

アクティビティの主要なイベントをキャプチャできる場合は、それをビューに渡すのは簡単です。ビュー内のメソッドをアクティビティから呼び出すだけです。あなたはこのようなものを持っているかもしれません(私はこのコンピューターに日食を持っていないので、私はブラウザーで直接コーディングします-構文エラーがあるかもしれません):

public class LibraryHomeView extends LinearLayout {

//......

    public void keyEventRecieved(String eventMessage) {
        Log.d(TAG, eventMessage);
    }
//.......
}

アクティビティ内:

public class myActivity extends Activity {
LibraryHomeView control;
//......
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        control = (LibraryHomeView)findViewById(R.id.myCustomViewId);
    }

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU) {
             Log.d(TAG, "KeyEvent.KEYCODE_MENU");
             control.keyEventRecieved("Yahooooo!");
                return true;
            }

    }



//......

}
于 2012-07-10T06:50:18.370 に答える