0

誰かが私を助けてくれることを願っています。「カスケード」警告ダイアログのシステムを実装する必要があります。ユーザーは一連の情報をフローのように挿入し、ダイアログから別のダイアログに渡され、データを配列に格納します。特定の条件が検証された場合、このフローの最後に配列のデータをデータベースに格納します。

これを実装できる私のコードは次のとおりです。

これは、フローを実装するサイクルであり、onMenuItemClick イベントによって起動されます

count=0;
do{
        AlertDialog dialog;
        dialog = alertSequence(view,label,edit);
        dialog.show();
}while(count<4);

そしてこれがalertSequence()関数です

public AlertDialog alertSequence(View v,TextView t,EditText e){
    AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
    final EditText edit = e;
    switch(count){
    case 0:
        builder.setView(v);
        t.setText("Inserisci il titolo per il nuovo canto");
        builder.setPositiveButton("Continua", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                String elem = edit.getText().toString().trim();
                if(elem.equals(null) || elem.length()==0){
                    // non faccio nulla
                }
                else{
                    info[count] = elem;
                    count++;
                }
            }
            }).setNegativeButton("Annulla", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    count = 10;
                    dialog.cancel();
                }
            });
        break;
    case 1:
        builder.setView(v);
        t.setText("Inserisci l'autore per il nuovo canto");
        builder.setPositiveButton("Continua", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                String elem = edit.getText().toString().trim();
                if(elem.equals(null) || elem.length()==0){
                    // non faccio nulla
                }
                else{
                    info[count] = elem;
                    count++;
                }
            }
            }).setNegativeButton("Annulla", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    count = 10;
                    dialog.cancel();
                }
            });
        break;
    case 2:
        builder.setMessage("Seleziona la categoria da assegnare");
        int i=1;
        String query = "SELECT titolo FROM categorie WHERE titolo<>'uncategorized' ORDER BY titolo ASC";
        Cursor c = mydb.select(query);
        if(!c.equals(null)){
            options = new String[c.getCount()+1];
            options[0] = "(annulla)";
            while(c.moveToNext()){
                options[i] = c.getString(0);
                i++;
            }
        }
        c.close();
        mydb.close();
        builder.setCancelable(false);
        builder.setItems(options, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                if(options[which].equals("(annulla)"))
                    count = 10;
                else{
                    info[count] = options[which];
                    count++;
                }
            }
        });
        break;
    case 3:
        builder.setView(v);
        t.setText("Inserisci il testo per il nuovo canto");
        edit.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
        edit.setHeight((int) 300d);
        edit.setGravity(Gravity.LEFT | Gravity.TOP);
        edit.setHorizontallyScrolling(false);
        builder.setPositiveButton("Continua", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                String elem = edit.getText().toString().trim();
                if(elem.equals(null) || elem.length()==0){
                    // non faccio nulla
                }
                else{
                    info[count] = elem;
                    count++;
                }
            }
            }).setNegativeButton("Annulla", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    count = 10;
                    dialog.cancel();
                }
            });
        break;
    }

    return builder.create();
}

私のスコープに合っていますか?これがWindowManager$BadTokenException を生成しただけです - ウィンドウ トークンを追加できません null はdialog.show()、do-while サイクルで呼び出したときにアプリケーション用ではありません。何がありえますか?手伝ってくれてありがとう。

編集:
ブラックベルトに感謝します。解決しました。しかし、別のエラーIllegalstateexception - The specified child already has a parent android you must call removeView() from the child's parent on dialog.show(). 私はこの問題の何かを赤くしていますが、それを解決する方法がわかりません。助言がありますか?

4

1 に答える 1