не заходишь в Онкейлистенер? Не в состоянии разобраться - PullRequest
1 голос
/ 18 января 2012
   package woot.wat.wen;

import android.app.Activity;
import android.os.Bundle;
import android.text.Layout;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class HmmActivity extends Activity implements OnKeyListener  {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //RelativeLayout Relay=(RelativeLayout) getResources().getLayout(R.layout.main);
        ViewGroup group = (ViewGroup) findViewById(R.id.relativeLayout1);
        TextView tv=(TextView) findViewById(R.id.tv1);
        MarginLayoutParams mapara = new MarginLayoutParams(tv.getLayoutParams());
        mapara.setMargins(225, 260, 120, 120);


        LayoutParams params=new RelativeLayout.LayoutParams(mapara);
        tv.setLayoutParams(params);
        group.setFocusable(true);
        group.setOnKeyListener(this);

        int children = group.getChildCount();
        for (int i = 0; i < children; i++) {

            View child = group.getChildAt(i);
            child.setFocusable(true);
            child.setOnKeyListener(this);


            }



        //tv.setOnKeyListener(this);


    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK &&  event.getRepeatCount() == 0) {
              //    back=true;
                    // do something on back.
            Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT);




            System.out.println("WTF");


                    return true;
                }



        else    

            return super.onKeyDown(keyCode, event);
    }


    public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK /*&& event.getRepeatCount() == 0*/) {
              //    back=true;
                    // do something on back.
                    Log.d("backk", "goingoin backback");






                    return true;
                }

                else
                // TODO Auto-generated method stub
                return super.onKeyDown(keyCode, event);
                //return false;
            }






    }

Как вы можете видеть в коде, я пытаюсь что-то сделать, когда нажата клавиша «назад», но коды клавиш никогда не используются. Кажется, что программа никогда не входит в метод onKey при каждом нажатии кнопки back, как в эмуляторе, так и на устройстве. Любая идея, что я делаю неправильно ..?

Я поставил обновленный код.

Хорошо, я создал новый чистый проект. Вот код

package you.packag.namespac;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class BlActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if(keyCode==KeyEvent.KEYCODE_BACK){
        Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT);
        return true; //that is important
    }else 
    return super.onKeyDown(keyCode, event);
}
}

Все та же проблема. Тост не отображается. Поток программы / управление переходит как к возвращаемым истинам, так и к возвращаемым супер операторам при каждом нажатии назад. Не понимаю, как это должно происходить. что-то маленькое, я делаю неправильно. Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 18 января 2012

Попробуйте

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if(keyCode==KeyEvent.KEYCODE_BACK){
        Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT).show();
        return true; //that is important
    }else 
    return super.onKeyDown(keyCode, event);
}

Или в вашем коде:

1) Поставьте @Override перед вашим методом onKey

2) изменить return false на return super.onKey(keyCode, event)

Также - не обязательно реализовывать OnKeyListener

0 голосов
/ 18 января 2012

Вы должны переопределить onKeyDown() и установить onKeyDownListener. В любом случае, вы можете просто переопределить onBackPressed().

0 голосов
/ 18 января 2012

Попробуйте использовать public boolean onKeyDown (int keyCode, KeyEvent event) вместо.

...