私は4つのタブを持つプログラムを持っています。Android:戻るボタンはonKeyDownをバイパスし、アプリケーションを閉じます
これらのタブの1つは、ListViewを持つActivityGroupです。リスト項目の1つをクリックすると、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内のリンクを最初にクリックしてから2回押すと、ListViewで元のアクティビティに戻ります。
Eclipseでブレークポイントを使用することから、WebActivityビューに入った直後に[戻る]ボタンを押すと、プログラムがonKeyDownにもアクセスしないことがわかりました。ただし、WebView内のリンクをクリックしてから戻るボタンを押すと、onKeyDownメソッドが実行されます。
ここでは何が起こっていますか?
これは重大な問題になる可能性があります。 – slayton
タスクのロード中のWebページは、nwtwork条件が不安定であるため、AsyncTaskまたはIntent Serviceでトリガする方が良い –