[英]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.