簡體   English   中英

如何在alertDialog中調用alertDialog?

[英]How to call alertDialog in alertDialog?

我在android中有一個從javascript界面​​調用的警報對話框。 在警報對話框中,我有兩個按鈕,當您單擊其中一個按鈕時,我想啟動另一個包含list.but的警報對話框,但是當我單擊應用程序時崩潰了。 這是我的Java代碼:

public void SaveDialog(final String SaveID) {

    final SQLiteDatabase mydatabase1 = openOrCreateDatabase("CopyCollection", MODE_PRIVATE, null);
    Cursor c = mydatabase1.rawQuery("SELECT * FROM Details WHERE ID="+SaveID+";", null);
    if(c.moveToFirst()) {

        do {

            appName = c.getString(1);
            txtClip = c.getString(2);
            text_Date = c.getString(3);
        } while (c.moveToNext());
    }
    AlertDialog.Builder myDialog = new AlertDialog.Builder(AndroidHTMLActivity.this);
    myDialog.setTitle("ذخیره");
    myDialog.setPositiveButton("ذخیره", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            //======================================================
            String names[] ={"A","B","C","D"};
            final AlertDialog.Builder alertDialog = new AlertDialog.Builder(AndroidHTMLActivity.this);
            LayoutInflater inflater = getLayoutInflater();
            View convertView = (View) inflater.inflate(R.layout.main, null);
            alertDialog.setView(convertView);
            alertDialog.setTitle("List");
            ListView lv = (ListView) convertView.findViewById(R.id.listView1);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(AndroidHTMLActivity.this,android.R.layout.simple_list_item_1,names);
            lv.setAdapter(adapter);
            alertDialog.show();
        }
    });
    myDialog.setNegativeButton("اشتراک گذاری", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            String shareBody = txtClip;
            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            startActivity(Intent.createChooser(sharingIntent, "Share via"));
        }
    });
    myDialog.show();
}

這是logcat:

03-24 02:22:58.146    5499-5499/com.exercise.AndroidHTML W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb0cf3b20)03-24 02:22:58.156    5499-5499/com.exercise.AndroidHTML E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.exercise.AndroidHTML, PID: 5499
java.lang.IllegalStateException: Calling View methods on another thread than the UI thread.
        at com.android.webview.chromium.WebViewChromium.createThreadException(WebViewChromium.java:268)
        at com.android.webview.chromium.WebViewChromium.checkThread(WebViewChromium.java:284)
        at com.android.webview.chromium.WebViewChromium.setLayoutParams(WebViewChromium.java:1618)
        at android.webkit.WebView.setLayoutParams(WebView.java:2099)
        at android.view.ViewGroup.addViewInner(ViewGroup.java:3577)
        at android.view.ViewGroup.addView(ViewGroup.java:3415)
        at android.view.ViewGroup.addView(ViewGroup.java:3391)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at com.exercise.AndroidHTML.AndroidHTMLActivity$MyJavaScriptInterface.SaveDialog(AndroidHTMLActivity.java:198)
        at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
        at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.os.HandlerThread.run(HandlerThread.java:61)

JavaScript在主線程以外的其他線程上運行,您無法直接在其上顯示對話框。 相反,您可以顯示如下對話框:

首先,向您的MyJavaScriptInterface類添加一個方法:

public void showDialog(final String SaveID){
    // create a Handler with the main Looper and 
    // post the dialog showing work to main thread.
    new Handler(Looper.getMainLooper()).post(new Runnable(){
        SaveDialog(SaveID);
    });
}

然后,調用showDialog()方法而不是SaveDialog()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM