Я установил DialogFragment, который отлично работает. У меня проблема только в том, что он продолжает вылетать при втором щелчке. В нем говорится, что у родителя уже есть ребенок, и я должен сначала вызвать removeView () для родителя ребенка.

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

Код:

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
Zakdroid 12 Дек 2014 в 11:41

2 ответа

Лучший ответ

Двигаться 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
gio 12 Дек 2014 в 09:33

Вы можете попробовать этот способ его работы для меня, все, что я сделал, это поместил 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();

            }
        });
0
George Thomas 12 Дек 2014 в 09:40