Android:“返回”按钮绕过onKeyDown并关闭应用程序

Android:“返回”按钮绕过onKeyDown并关闭应用程序,第1张

概述我有一个带有4个不同标签的程序.这些选项卡之一是其中具有ListView的ActivityGroup.当我单击列表项之一时,它将切换到WebActivity:lv.setOnItemClickListener(newOnItemClickListener(){publicvoidonItemClick(AdapterView<?>parent,Viewview,

我有一个带有4个不同标签的程序.

这些选项卡之一是其中具有ListVIEw的ActivityGroup.当我单击列表项之一时,它将切换到WebActivity:

        lv.setonItemClickListener(new OnItemClickListener() {          public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw,              int position, long ID) {              Intent intent = new Intent(tabactivity2.this, WebActivity.class);              Bundle b = new Bundle();              b.putString("URL", URLs[(int)ID]);              b.putString("prevActivity", "tabactivity2");              intent.putExtras(b);              replaceContentVIEw("web", intent);          }        });    }    public voID replaceContentVIEw(String ID, Intent newIntent) {        VIEw vIEw = getLocalActivityManager().startActivity(ID,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_top)) .getDecorVIEw(); this.setContentVIEw(vIEw);    }

所以现在我们在WebActivity类中.这是代码:

public class WebActivity extends ActivityGroup {    WebVIEw mWebVIEw;    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.web);        Bundle b = getIntent().getExtras();        String URL = b.getString("URL");        mWebVIEw = (WebVIEw) findVIEwByID(R.ID.webvIEw);        mWebVIEw.getSettings().setJavaScriptEnabled(true);        mWebVIEw.getSettings().setPluginsEnabled(true);        mWebVIEw.loadUrl(URL);        mWebVIEw.setWebVIEwClIEnt(new FirstTabWebVIEwClIEnt());            }    @OverrIDe    public boolean onKeyDown(int keyCode, KeyEvent event) {        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebVIEw.canGoBack()) {            mWebVIEw.goBack();            return true;        }        Bundle b = getIntent().getExtras();        String retActivity = b.getString("prevActivity");        if (retActivity == "tabactivity2") {            Intent intent = new Intent(WebActivity.this, tabactivity2.class);            replaceContentVIEw("List_webpages", intent);            return true;        }        return super.onKeyDown(keyCode, event);    }    public voID replaceContentVIEw(String ID, Intent newIntent) {        VIEw vIEw = getLocalActivityManager().startActivity(ID,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_top)) .getDecorVIEw(); this.setContentVIEw(vIEw);    }

这是一件奇怪的事情:如果我在进入WebActivity类后立即单击“后退”按钮,它将关闭该应用程序.

但是,如果我先单击WebVIEw内的任何链接,然后再按两次,则它将使我返回到具有ListVIEw的原始活动.

通过在Eclipse中使用断点,我发现如果在进入WebActivity视图后立即按“后退”按钮,该程序甚至都不会访问onKeyDown.但是,如果我单击WebVIEw中的任何链接,然后按返回按钮,则它将通过我的onKeyDown方法.

这里发生了什么??

解决方法:

您的WebVIEw没有焦点,这导致后退按钮在该按钮(应用程序堆栈)的顶部被触发.如果单击链接,它将回到后焦点. WebVIEw有一些与焦点有关的奇怪问题,请看一下这篇文章:Android WebView focus problem

在这里,您还将找到一些建议的解决方法来获取焦点,您需要在正确的位置调用WebVIEw上的requestFocus().

总结

以上是内存溢出为你收集整理的Android:“返回”按钮绕过onKeyDown并关闭应用程序全部内容,希望文章能够帮你解决Android:“返回”按钮绕过onKeyDown并关闭应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1084549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存