-1

我正在构建一个应用程序项目(我的第二个项目),可以说,它在等待带有 webview 的第二个 viewflipper 布局以加载网页时显示一个初始加载屏幕。加载时的 html 网页调用我的 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();

对答案的任何帮助表示赞赏!

编辑-------------------------- 已经找到了调试器并且得到了一个异常:只有一个线程可以访问它的设置视图!

4

1 回答 1

0

啊啊我不知道runOnUiThread() 这对它进行了排序!

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

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

只是注意到我忘记停止我的处理程序延迟执行,如果语句变量错误检查我认为。

于 2012-09-17T20:58:36.043 回答