首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在alertDialog中调用alertDialog?

如何在alertDialog中调用alertDialog?
EN

Stack Overflow用户
提问于 2015-03-24 15:00:47
回答 1查看 129关注 0票数 0

我在android中有一个从javascript界面调用的警告对话框。在警告对话框中,我有两个按钮,当您单击其中一个按钮时,我想启动其他警告对话框,其中包括list.but当我单击应用程序崩溃。这是我的java代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2015-03-24 15:08:16

JavaScript运行在一个独立的线程上,而不是主线程,你不能直接在主线程上显示对话框。相反,您可以按如下方式显示对话框:

首先,向您的MyJavaScriptInterface类添加一个方法:

代码语言:javascript
复制
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()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29226678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档