2014-12-12 4 views
0

Я установил DialogFragment, который отлично работает. У меня только проблема, что он продолжает сбой во второй onclick. Он говорит, что у родителя уже есть дочерний элемент, и я должен сначала вызвать removeView() родителя ребенка.AlertDialog сбой 2d onclick (Android/Java)

Подсказки/объяснения о том, что происходит здесь?

Код:

final EditText input = new EditText(getActivity()); 
    testView = (TextView)mRootView.findViewById(R.id.testView); 
    testView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); 
      alert.setTitle("Doe Mee "); 
      alert.setView(input); 
      final String value; 
      alert.setPositiveButton("Submit", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        String value = String.valueOf(input.getText()); 
        Toast.makeText(getActivity().getApplicationContext(), "Do" + value, 
          Toast.LENGTH_LONG).show(); 
       } 
      }); 
      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }); 
      alert.show(); 

     } 
    }); 

Ошибка:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
     at android.view.ViewGroup.addViewInner(ViewGroup.java:3771) 
     at android.view.ViewGroup.addView(ViewGroup.java:3624) 
     at android.view.ViewGroup.addView(ViewGroup.java:3600) 
     at com.android.internal.app.AlertController.setupView(AlertController.java:414) 
     at com.android.internal.app.AlertController.installContent(AlertController.java:242) 
     at android.app.AlertDialog.onCreate(AlertDialog.java:337) 
     at android.app.Dialog.dispatchOnCreate(Dialog.java:364) 
     at android.app.Dialog.show(Dialog.java:265) 
     at android.app.AlertDialog$Builder.show(AlertDialog.java:951) 
     at nl.boydroid.loyalty4g.app.LoginFragment$6.onClick(LoginFragment.java:277) 
     at android.view.View.performClick(View.java:4637) 
     at android.view.View$PerformClick.run(View.java:19422) 
     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:5586) 
     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:1268) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
     at dalvik.system.NativeStart.main(Native Method) 
+0

, которую вы это код, который вызывает исключение? – Blackbelt

+0

говорится, что он находится в строке 277, 277 - alert.show(); – Zakdroid

+0

можете ли вы прокомментировать строку setView и запустить ее снова? – Blackbelt

ответ

0

Move final EditText input = new EditText(getActivity()); в public void onClick(View v)

было бы

AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); 
alert.setTitle("Doe Mee "); 
final EditText input = new EditText(getActivity()); 
alert.setView(input); 

Проблема в том, что у input уже есть родитель, когда вы делаете 2-й щелчок. Родитель был установлен 1-м кликом.

+0

Спасибо за объяснение и участие, работал как шарм! – Zakdroid

0

Вы можете попробовать этот способ его работать Фюн для меня, Все, что я сделал, чтобы поставить EditText внутри метода OnClick и сделать его окончательный

textView1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       AlertDialog.Builder alert = new AlertDialog.Builder(
         getActivity()); 

       // Set an EditText view to get user input 
       final EditText input = new EditText(getActivity()); 
       alert.setTitle("Doe Mee "); 
       alert.setView(input); 
       final String value; 
       alert.setPositiveButton("Submit", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           String value = String.valueOf(input.getText()); 
           Toast.makeText(
             getActivity().getApplicationContext(), 
             "Do" + value, Toast.LENGTH_LONG).show(); 
          } 
         }); 
       alert.setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 

          } 
         }); 
       alert.show(); 

      } 
     }); 
Смежные вопросы