私は、webview を使用して 2 番目の viewflipper レイアウトが web ページをロードするのを待っている間に、スプラッシュ ロード画面を表示するアプリ プロジェクト (これまでで 2 回目) を作成しています。読み込み中の html Web ページは、Android Java の関数を呼び出す必要vf.setDisplayedChild(TWO);
がありますが、そうではありません!!! 前述の関数の代わりにトーストでこれをテストしましたか?! これは正常に表示されます。しかし、残念ながらそれをdisplaychildに戻すと、ロード画面がクラッシュしてmain.xmlアクティビティに戻ってから、viewflipperでアクティビティを再起動し、クラッシュとリロードの間でループします!
oncreate 関数の vf コントロールと、vf.displaychild
呼び出しがパブリックjavascriptinterface
クラスにあることに関係があると思われますか??!!! しかし、それ以上のことをする知識がありません。
私はある種のブール値の変更リスナーを調査しましたが、これを行う価値があるとは思いません。
私のコード:
package com.......;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Toast;
import android.widget.ViewFlipper;
public class Webview extends Activity {
ViewFlipper vf;
private final int ONE = 0;
private final int TWO = 1;
private WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vf);
vf=(ViewFlipper)findViewById(R.id.flipper);
vf.addView(View.inflate(this, R.layout.load, null), ONE);
vf.addView(View.inflate(this, R.layout.webview, null), TWO);
vf.setDisplayedChild(ONE);
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setSupportZoom(false);
webView.addJavascriptInterface(new JSI(this), "android");
webView.loadUrl("my wamp dir");
//failsafe if not shown
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Sorry There was a problem!\nPlease check your Data/WI-FI connection.", Toast.LENGTH_SHORT).show();
finish();
}
}, 30000);
}
public class JSI
{
Context mContext;
/** Instantiate the interface and set the context */
JSI(Context c) {
mContext = c;
}
public void loaded()
{
vf.setDisplayedChild(TWO);
//Toast.makeText(mContext, "Showing!", Toast.LENGTH_SHORT).show();
}
}
}
そしてもちろん、この関数は jquery/script ready 関数で次のように呼び出されます。
android.loaded();
答えに向けて感謝します!
EDIT------------------------- デバッガーを理解し、例外が発生しています: スレッドのみがその設定ビューにアクセスできます!