我正在构建一个应用程序项目(我的第二个),让我们说,它显示一个启动加载屏幕,同时它等待第二个viewflipper布局与webview加载网页。加载的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();
任何有助于回答的帮助!
EDIT ------------------------- 已经找到了调试器并且我得到了一个例外:只有一个线程可以访问它的设置视图!
答案 0 :(得分:0)
AAAH我不知道runOnUiThread()
这排序了!
public void Activated()
{
runOnUiThread(new Runnable() {
@Override
public void run() {
vf.setDisplayedChild(TWO);
}
});
并且注意到我忘记了我的处理程序延迟执行,如果语句变量错误检查我认为。