-2

新しいクイック アクションがトリガーされたときに、新しいアラート ダイアログを呼び出そうとしていました。しかし、「Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません」というエラーが発生しています..この問題を解決する方法を教えてください??

quickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {          
                public void onItemClick(QuickAction source, int pos, int actionId) {                
                    ActionItem actionItem = quickAction.getActionItem(pos);

                    //here we can filter which action item was clicked with pos or actionId parameter
                    if (actionId == ID_PASSC) {

                    } else if (actionId == ID_PASS) {
                         final Thread t = new Thread() {
                                @Override
                                public void run() {
                                    try {
                                        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        final View layout = inflater.inflate(R.layout.password_dialog, (ViewGroup) findViewById(R.id.root));
                                        final EditText password1 = (EditText) layout.findViewById(R.id.EditText_Pwd1);
                                        final EditText password2 = (EditText) layout.findViewById(R.id.EditText_Pwd2);
                                        AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

                                        builder.setTitle("Change password");
                                        builder.setView(layout);
                                        builder.show(); 
                                    } finally {

                                    }
                                }
                            };
                            t.start();
                    } else if (actionId == ID_HELP){

                    }else{

                    }
                }
            });
4

1 に答える 1

0

常に UI スレッドで UI 操作を行う必要があります。ダイアログを作成するために新しいスレッドを作成する理由がわかりません。以下のように、新しいスレッドの作成を削除し、ダイアログを同期的に表示します。

} else if (actionId == ID_PASS) {

         LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);                                      final View layout = inflater.inflate(R.layout.password_dialog, (ViewGroup) findViewById(R.id.root));
         final EditText password1 = (EditText) layout.findViewById(R.id.EditText_Pwd1);
         final EditText password2 = (EditText) layout.findViewById(R.id.EditText_Pwd2);
         AlertDialog.Builder builder = new AlertDialog.Builder([ActivityName].this);
         builder.setTitle("Change password");
         builder.setView(layout);
         builder.show(); 
   } 
于 2012-09-26T19:01:32.673 に答える