【问题标题】:Android and back buttonAndroid 和返回按钮
【发布时间】:2012-05-23 17:24:42
【问题描述】:

我的后退按钮有问题。他不工作。当我从第一个活动转到第二个,从第二个到第三个返回按钮时不想工作。我用过:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        Log.v("Co1s", "Cos1");
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

但是当我按下按钮时,我只得到:

05-23 10:45:57.863: W/KeyCharacterMap(238): 无法打开 keycharmap 文件 05-23 10:45:57.863: W/KeyCharacterMap(238): 加载 keycharmap 时出错 文件'/system/usr/keychars/pm8058-keypad.kcm.bin'。 hw.keyboards.0.devname='pm8058-keypad' 05-23 10:45:57.863: W/KeyCharacterMap(238):使用默认键盘映射: /system/usr/keychars/qwerty.kcm.bin

并且此功能中的此日志未显示在日志中。为什么?

编辑: acriivity nr1:

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.services_description);

        back_button = (Button) findViewById(R.id.service_back_button);
        back_button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                intent = new Intent(services_description.this, service.class);
                TabActivityGroup parentActivity = (TabActivityGroup)getParent();
                parentActivity.startChildActivity("menu_activity", intent);     
                finish();
            }
        });
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.v("Co1s", "Cos1");
        }
        return super.onKeyDown(keyCode, event);
    }

第二个:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.service);

    title = (TextView) findViewById(R.id.serviceTitle);
    description = (TextView) findViewById(R.id.serviceDescription);
    nextPage = (ImageView) findViewById(R.id.serviceNextPage);
    back_button = (Button) findViewById(R.id.service_back_button);


    nextPage.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            intent = new Intent(service.this, services_description.class);
            TabActivityGroup parentActivity = (TabActivityGroup)getParent();
            parentActivity.startChildActivity("menu_activity", intent);     

        }
    });
    back_button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            finish();

        }
    });
}
@Override
public void onBackPressed() {
    Log.v("Cos", "Cos");
    finish();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        Log.v("Co1s", "Cos1");
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

【问题讨论】:

  • 您的两个中的哪个中的后退按钮不起作用?如果您的第一个活动,您都将onClick 侦听器附加到后退按钮,同时您覆盖onKeyDown。在您的第二个活动中,您覆盖了onBackPressed 和onKeyDown。这一切似乎有点可疑......似乎你正在做很多不同的事情而不知道你在真正在做什么,所以我的建议:删除所有“绒毛”并从 as尽可能简单的例子。让后退按钮正常工作,然后同时开始添加一个事件处理程序以使日志记录也正常工作。

标签: android


【解决方案1】:

您可以通过onBackPressed() 方法覆盖后退按钮,也可以在此方法中使用intent 来移动应用程序中的任何活动。您可以从onKeyDown() or onBackPressed() 这个链接获得更多信息。这将为您提供我们如何做到这一点

【讨论】:

    【解决方案2】:

    您无需执行任何操作即可使后退按钮正常工作。只需删除整个块if (keyCode == KeyEvent.KEYCODE_BACK) 等,你应该一切都好。

    如果您出于某种原因需要在单击后退按钮时记录,我认为您可以这样做:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.v("Co1s", "Cos1");
        }
        return super.onKeyDown(keyCode, event);
    }
    

    重要的是您将单击按钮的“处理”传递给被覆盖的方法,并让 Android 操作系统自己处理返回到上一个活动。

    【讨论】:

    • 这不起作用。我没有得到任何日志。只有那个警告,但只有当我第一次按下按钮时。
    • @edi233:但是您的后退按钮是否按预期工作,即返回上一个活动?我认为这是这里的主要部分......你说你没有得到任何日志条目:你有没有尝试在你的 onKeyDown 方法中设置一个断点?在调试模式下运行时会发生什么? keyCode 等的值是多少?你需要给我们更多的信息.​​.....
    • 没有。它仍然不起作用。我想用这个日志来看看当我点击按钮日志时是否显示给我。单击时,调试模式未启动。我不知道为什么。在其他项目中,您的方式可以完美运行,但在这种情况下则不然。
    • @edi233:您能否详细说明“它仍然不起作用”的意思?后退按钮应该“开箱即用”,无需添加任何关键事件处理程序。如果你完全删除onKeyDown 方法会发生什么,你会回到之前的活动吗?您应该发布更多代码,最好是重现问题的完整示例。
    • 它仍然不起作用意味着当我点击应用程序时不要回到以前的活动。我添加了一些代码来看看我如何开始新的活动。可能有问题
    【解决方案3】:

    您可以在活动中覆盖onBackPressed(),而不是覆盖onKeyDown()

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 2014-09-27
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      相关资源
      最近更新 更多