2016-12-27 1 views
2

Я пытаюсь предоставить данные в моем спискеView. При нажатии FAB тогда появляется диалоговое окно с одним editText и двумя кнопками. В первый раз это позволяет мне передавать данные в ListView. но когда я пытаюсь второй раз он показывает ошибку:Как вызвать removeView() в родительском элементе родителя в диалоговом окне

FATAL EXCEPTION: main
Process: com.example.app.wounderlist.wounderlist, PID: 3790
java.lang.IllegalStateException: Thespecifiedchildalreadyhasaparent. YoumustcallremoveView()onthechild'sparentfirst. at android.view.ViewGroup.addViewInner(ViewGroup.java:3562) at android.view.ViewGroup.addView(ViewGroup.java:3415) at android.view.ViewGroup.addView(ViewGroup.java:3391) at android.support.v7.app.AlertController.setupCustomContent(AlertController.java:647) at android.support.v7.app.AlertController.setupView(AlertController.java:463) at android.support.v7.app.AlertController.installContent(AlertController.java:226) at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257) at android.app.Dialog.dispatchOnCreate(Dialog.java:361) at android.app.Dialog.show(Dialog.java:262) at com.example.app.wounderlist.wounderlist.HomeFragment$1.onClick(HomeFragment.java:79) at android.view.View.performClick(View.java:4444) at android.view.View$PerformClick.run(View.java:18457) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5113) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) at dalvik.system.NativeStart.main(Native Method)

И вот мой код

//create a dialog box with a editText and a Add button when pressing the #FAB 
     final EditText taskEditText = new EditText(getActivity()); 
     mFab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       AlertDialog dialog = new AlertDialog.Builder(getActivity()) 
         .setTitle("Add a new task") 
         .setMessage("What do you want to do next?") 
         .setView(taskEditText) 
         .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 

           //for getting text from the editText 
           String itemText = taskEditText.getText().toString(); 
           mItemsAdapter.add(itemText); 


          } 
         }) 
         .setNegativeButton("Cancel", null) 
         .create(); 
       dialog.show(); 
      } 
     }); 
+0

Вы используете свою задачуEditText в другом месте? –

+0

нет Я использую его только в setView (taskEditText); и в String itemText = taskEditText.getText(). toString(); только –

+0

Вы должны поместить edittext в макет ... как относительный или линейный, или фрейм ... затем добавить в alertdialog. –

ответ

1

Вы создаете новый экземпляр AlertDialog каждую кнопку мыши. Создайте окончательный AlertDialog вне внутреннего класса OnClickListener.

попробовать это:

final EditText taskEditText = new EditText(getActivity()); 
AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity()); 
builder1.setMessage("What do you want to do next?"); 
builder1.setCancelable(true); 

builder1.setPositiveButton("Add", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 

           //for getting text from the editText 
           String itemText = taskEditText.getText().toString(); 
           mItemsAdapter.add(itemText); 

          } 
         }); 

builder1.setNegativeButton(
    "Cancel", null); 

AlertDialog alert11 = builder1.create(); 

mFab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       alert11.show(); 
      } 
     }); 
0
final EditText taskEditText = new EditText(getActivity()); 
     AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity()); 
     builder1.setMessage("What do you want to do next?"); 

     //I add this extra code to get the EditText 
     builder1.setView(taskEditText); 
     builder1.setCancelable(true); 

     builder1.setPositiveButton("Add", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       //for getting text from the editText 
       String itemText = taskEditText.getText().toString(); 
       mItemsAdapter.add(itemText); 

       //And I also add this code to clear the editText 
       taskEditText.setText(""); 

      } 
     }); 

     builder1.setNegativeButton(
       "Cancel", null); 

     final AlertDialog alert11 = builder1.create(); 

     mFab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       alert11.show(); 
      } 
     }); 

Наконец я получил ответ

спасибо всем и особенно @ rafsanahmad007

Днем Coding !!

Смежные вопросы