私は自分のアプリケーションのヘルプシステムを書いています。AlertDialog内でWebViewを使用しています。HTMLヘルプページはassets/ディレクトリに保存され、相互にリンク参照されます。問題を再現するための最小限のコード:
package qa.so.wv;
import android.content.Context;
import android.app.AlertDialog;
import android.webkit.WebView;
import android.content.DialogInterface;
import android.view.ContextThemeWrapper;
import android.webkit.WebSettings;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class DialogInformation {
public void showFile(Context context, String file) {
AlertDialog.Builder dialog = new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.InformationDialogStyle));
final Context ctx = context;
final WebView wv = new WebView(context);
wv.setWebViewClient(
new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("utf-8");
wv.loadUrl(
"file:///android_asset/"+file
);
dialog.setView(wv);
dialog.setPositiveButton(
context.getString(R.string.cont),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}
);
dialog.setNeutralButton(
"Back",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (wv.isFocused() && wv.canGoBack()) {
wv.goBack();
} else {
Toast.makeText(
ctx,
"No go back for Back button",
Toast.LENGTH_LONG
).show();
}
}
}
);
dialog.setOnCancelListener(
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if (wv.isFocused() && wv.canGoBack()) {
wv.goBack();
} else {
Toast.makeText(
ctx,
"No go back for system return 'hardware' button",
Toast.LENGTH_LONG
).show();
}
}
}
);
dialog.show();
}
}
このクラスはそこで使用されます:
package qa.so.wv;
import android.os.Bundle;
import android.app.ListActivity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.view.MenuItem;
import android.view.Menu;
import android.widget.Toast;
import android.webkit.WebView;
public class ShowArchive extends ListActivity
{
// options menu items constants
protected static final int MENU_HELP = Menu.FIRST+11;
protected static final int MENU_QUIT = Menu.FIRST+16;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/* Create Menu Items */
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_HELP, 0, R.string.menu_help);
menu.add(0, MENU_QUIT, 0, R.string.menu_quit);
return true;
}
/* Handles Menu Item Selection */
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_HELP:
DialogInformation dn = new DialogInformation();
dn.showFile(
this,
getString(R.string.help_file)
);
return true;
case MENU_QUIT:
finish();
return true;
}
return false;
}
}
そして、assets /ディレクトリページ1からの2つのサンプルページ:
<html>
<a href="second.html">link to 2-nd file"</a>
<p>
Some text.
</p>
</html>
および2ページ目:
<html>
<p>2-nd file</p>
</html>
メニューから「ヘルプ」と呼びます。1ページ目が表示されます。クリックしてリンクします。2ページ目が正しく読み込まれました。 「戻る」ボタンまたはハードウェアの「キャンセル」ボタンをクリックすると、以前に表示されたページをロードする代わりに、ヘルプダイアログが消えます。
この問題を解決するのを手伝ってください。