1

ListView アイテムを長押しすると、3 つのボタンがある AlertDialog が開きます。それらの1つは、アイテムなどの名前を変更する「名前の変更」です。

longClickAlert.setNegativeButton("Rename", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    renameAlert.setMessage("New name:");
                    renameAlert.setView(input);
                    renameAlert.setPositiveButton("Enter", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            renameLine(externalStoragePath + "/Android/data/com.whizzappseasyvoicenotepad/recorded files.txt", recordedFilesArray.get(toDelete), input.getText().toString());
                            currentFilePath = externalStoragePath + File.separator + "/Android/data/com.whizzappseasyvoicenotepad/" + recordedFilesArray.get(toDelete) + ".mp3";
                            renameFile(input.getText().toString());
                            recordedFilesArray.set(toDelete, input.getText().toString());
                            listAdapter.notifyDataSetChanged();
                            dialog.dismiss();
                        }
                    });
                    renameAlert.show();
                    dialog.dismiss();
                }
            });

これは正常に機能し、アイテム名とその他すべてが正常に変更されますが、一度しか機能しません。ファイルの名前を変更してから、もう一度名前を変更しようとすると、アプリがクラッシュし、これが logcat ファイルです。

08-21 11:26:13.631: E/AndroidRuntime(7260): FATAL EXCEPTION: main
08-21 11:26:13.631: E/AndroidRuntime(7260): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.view.ViewGroup.addViewInner(ViewGroup.java:3506)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.view.ViewGroup.addView(ViewGroup.java:3377)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.view.ViewGroup.addView(ViewGroup.java:3353)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at com.android.internal.app.AlertController.setupView(AlertController.java:413)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at com.android.internal.app.AlertController.installContent(AlertController.java:241)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.app.AlertDialog.onCreate(AlertDialog.java:337)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.app.Dialog.dispatchOnCreate(Dialog.java:355)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.app.Dialog.show(Dialog.java:260)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at com.whizzappseasyvoicenotepad.RecordedLibrary$3$2.onClick(RecordedLibrary.java:158)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.os.Looper.loop(Looper.java:137)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at java.lang.reflect.Method.invokeNative(Native Method)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at java.lang.reflect.Method.invoke(Method.java:525)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-21 11:26:13.631: E/AndroidRuntime(7260):     at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0

ユーザーCruceoがコメントで答えてくれました。問題は、onCreate で新しい AlertDialog.Builder を宣言したため、アクティビティが初めて開始されたときにのみ作成されたことです。だから引っ越しただけ

renameAlert = new AlertDialog.Builder(mContext);

ボタンがクリックされるたびに宣言され、機能するように、クリックメソッドに追加しました。

Cruceo: あなた自身の回答を投稿する場合、私はあなたの回答を受け入れます。ありがとうございました!

于 2013-08-23T21:29:32.830 に答える