0

onKeyDownアクティビティを閉じるためにアクティビティに実装しました。次に、レイアウトにボタンを追加して実装しsetOnClickListenerました。を使用してボタン クリック用の別のレイアウトを表示することができました。そのビューのハードウェアの戻るボタン用に、これを使用して作成されたビューにLayoutInflater実装しました。setOnKeyListnerInflater

しかし、2 番目のレイアウトを表示しているときにハードウェアの [戻る] ボタンをクリックすると、内部のsetOnKeyListner処理が実行されません。たとえば、次の例では「2」ではなく「1」が表示されます。誰かが私の間違いを示すことができますか?

前もって感謝します。

public class TestActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {

    button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        LayoutInflater inflater = (LayoutInflater) getApplicationContext()
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = inflater.inflate(R.layout.layout_2, null);

            addContentView(view, new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            initGUI(view); //initialize layout views 

            view.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View dialog, int keyCode,  KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_BACK) {
                        Log.i("tag","2");       

                    }
                    return true;
                 }
           });      
        }
        });

}
//Hardware key pressing event
@Override
       public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.i("tag","1");
        }

        return super.onKeyDown(keyCode, event);
       }
}  
4

1 に答える 1

0

これは

タグ 1

あなたの活動インスタンスはカンマだからです。ボタンをクリックすると、このアクティビティにコンテンツを追加するだけですが、バックプレス時にアクティビティのコンテキストまたは参照がコマンドになるため、オーバーライドされたアクティビティのメソッドが常に呼び出されます。

このアクティビティ レイアウトに追加されるのはコンテンツのみですが、アクティビティのメイン コンテキストは 1 つです。

于 2012-11-01T11:20:29.497 に答える