【问题标题】:not going into Onkeylistener ?Not able to figure out不进入 Onkeylistener ?无法弄清楚
【发布时间】:2012-01-18 17:17:09
【问题描述】:
   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 代码。 每当在模拟器和设备中按下返回时,该程序似乎永远不会进入 onKey 方法。知道我做错了什么......?

我已经放了更新的代码。

好的,我已经创建了一个新的干净项目。代码如下

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);
}
}

仍然是同样的问题。吐司没有显示。程序流程/控制在每次按下返回时都会返回 true 和 return super 语句。真的不知道应该怎么发生。真的让我发疯。必须做点小事,我做错了。请帮忙。

【问题讨论】:

    标签: android listener keylistener onkeyup onkeydown


    【解决方案1】:

    尝试

    @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

    【讨论】:

    • 好吧,在使用 keydown 时,程序似乎进入了 if(keycode back) 但它似乎没有打印日志。它似乎也总是会进入“else return super”,即使它是按下的返回键。
    • @shady2020,看起来是 else 而不是 return super.(尝试将它们放在不同的行中)。您是设置断点来捕捉这一刻,还是只是直觉? )
    • breakpoints..stepover/stepinto etc...当按下返回时,它会同时进入 if 块和 else 块
    • 我没有得到 toast。每次按下返回键时,return true 和 return super 语句都会与 toast 一起执行。
    • @shady2020,这是不可能的)把你更新的代码放在你的问题中
    【解决方案2】:
    【解决方案3】:

    您应该覆盖onKeyDown() 并设置onKeyDownListener。无论如何,您可以简单地覆盖onBackPressed()

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多