android 禁止切换应用程序,Android:“返回”按钮绕过onKeyDown并关闭应用程序

我有一个带有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().

标签:back,onkeydown,button,webview,android

来源: https://codeday.me/bug/20191102/1988847.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值