我有一個包含4個不同選項卡的程序。Android:後退按鈕繞過onKeyDown並關閉應用程序
其中一個選項卡是一個ActivityGroup,它有一個ListView。當我點擊其中一個列表項時,它切換到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方法。
這是怎麼回事?
它可能是一個焦點問題。 – slayton
並且任務加載網頁最好在AsyncTask或Intent Service中觸發,因爲nwtwork條件不穩定 –