-1

私は、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------------------------- デバッガーを理解し、例外が発生しています: スレッドのみがその設定ビューにアクセスできます!

4

1 に答える 1

0

AAAH私はrunOnUiThread() これがそれを分類したことを知りませんでした!

public void Activated()
        {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                   vf.setDisplayedChild(TWO);
                }
            });

ステートメント変数のエラーチェックで考えた場合、ハンドラーの実行遅延を停止するのを忘れていることに気づきました。

于 2012-09-17T20:58:36.043 に答える