2

私のプロジェクトでは、最初にデータベースからいくつかの文字列を取得し、次に各文字列を a にマークアップし、 javascript 関数を呼び出し<li>てそれらを空に追加します。<ul>コードを修正して実行するたびに、最初は js 関数が実行されていないように見えましたが、再度実行すると js が機能し、すべての文字列が as に追加されていまし<ul><li>。コードを変更しない限り、アプリは正常に動作しました。つまり、モバイルに再インストールすると、このアプリを 2 回目に開くまで js が機能しません。データベースに問題はありません。問題は、jsが実行される前にwebviewがペイントされ、webviewが再ペイントされるとすべてうまくいくことだと思います。

ここに私の activity.java があります

public class WebView_testActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    WebView web = (WebView)findViewById(R.id.web_content);
    webView_handler(web);
    data_handler(web);
    Log.d(MyLog.LOG, "end of file");

}

private void webView_handler(WebView web){

    web.loadUrl("file:///android_asset/FormPanel.html");
    web.getSettings().setJavaScriptEnabled(true);

}

private void data_handler(WebView web){
    boolean hasSD = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); 
    //String SDPATH = Environment.getExternalStorageDirectory().getPath();


    if(hasSD){

        DbHelper data_helper = new DbHelper(this, "/mnt/sdcard/CTIL/QuestionDB/Q1.db");
        SQLiteDatabase database = data_helper.getReadableDatabase();
        String sql = "SELECT pe.Description FROM tblFormEngine_PoolElement pe " + 
                "NATURAL JOIN tblFormEngine_FormElement fe WHERE fe.PanelID = 1";
        Cursor c = database.rawQuery(sql,null);

        if(c.getCount() == 0)
            Log.d(MyLog.LOG, "empty");      

        c.moveToFirst();

        if(!c.isAfterLast()){

            do{
                String description = c.getString(0);
                String html = "<li><p>" + description + "</p></li>";
                Log.d(MyLog.LOG, html);
                //web.loadUrl("javascript:Element_AppendHTML('content',\""+html+"\")"); 
                MyThread mt = new MyThread(web, html);
                mt.start();
            }while(c.moveToNext());
        }

        c.close();
        database.close();

    }

}

private class MyThread extends Thread{

    private WebView web;
    private String html;


    MyThread(WebView web, String html){     
        this.web = web;
        this.html = html;
    }

    public  void run(){
        try {
                   web.loadUrl("javascript:Element_AppendHTML('content',\""+html+"\")");
            sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
}

これがjs関数です(実際にはJQuery関数です):

function Element_AppendHTML(ElementID,HTML)
{
    $("#"+ElementID).append(HTML);  
}

以下は、参照する必要がある元の HTML ファイルです。

<html>
<head>
<title>Form Panel</title>
<meta charset="utf-8">
<link rel="stylesheet" href="theme/FormPanel_Basic.css">
<script type="text/javascript" src="js/jquery-1.5.1.js"></script>   
<script type="text/javascript" src="js/jquery.scrollTo-1.4.2-min.js"></script>     
<script type="text/javascript" src="js/jquery.scrollToMe.js"></script>   
<script type="text/javascript" src="js/FormPanel.js"></script>
</head>
<body>    

<ul id="content" selected="true">


</ul>

</body>
</html>

なにか提案を?

4

1 に答える 1

2

から変更する

web.loadUrl("file:///android_asset/FormPanel.html");
web.getSettings().setJavaScriptEnabled(true);

web.getSettings().setJavaScriptEnabled(true);
web.loadUrl("file:///android_asset/FormPanel.html");

セットアップが終わったら loadurl を呼び出しませんか?

于 2012-06-20T20:43:38.973 に答える