繁体   English   中英

Android:调用DialogFragment的IllegalStateException

[英]Android: IllegalStateException calling DialogFragment

我已经有了这个工作,当我只有一个片段1(横向)的布局,但现在有一个额外的肖像版本我的应用程序崩溃与行switch (v.getId())的IllegalStateException switch (v.getId())

继承人代码:

    public void onTextViewClick(View v)
        {
            DialogFragment newFragment2 = new existingLessonDialog();
            DialogFragment newFragment = new newLessonDialog();

            if (v.getTag().equals("stunde")) newFragment2.show(getSupportFragmentManager(), "missiles");

            switch (v.getId())
            {
                case R.id.uhrzeit1:
                    index = 0;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit2:
                    index = 1;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit3:
                    index = 2;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit4:
                    index = 3;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit5:
                    index = 4;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit6:
                    index = 5;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit7:
                    index = 6;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit8:
                    index = 7;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit9:
                    index = 8;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit10:
                    index = 9;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;

                case R.id.uhrzeit11:
                    index = 10;
                    newFragment.show(getSupportFragmentManager(), "missiles");
                    break;
            }
        }

    class newLessonDialog extends DialogFragment {
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                // Get the layout inflater
                LayoutInflater inflater = getActivity().getLayoutInflater();

                // Inflate and set the layout for the dialog
                // Pass null as the parent view because its going in the dialog layout
                builder.setView(inflater.inflate(R.layout.new_lesson_dialog, null))
                        // Add action buttons,
                        .setPositiveButton("Speichern", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id)
                            {
                                EditText eF = (EditText)getDialog().findViewById(R.id.editFach);
                                fach = eF.getText().toString();
                                EditText eR = (EditText)getDialog().findViewById(R.id.editRaum);
                                raum = eR.getText().toString();
                                EditText eL = (EditText)getDialog().findViewById(R.id.editLehrer);
                                lehrer = eL.getText().toString();

                                if (tag != null)
                                {
                                    save(fach, raum, lehrer, tag, index);
                                }
                                else
                                {
                                    Toast.makeText(getAppContext(), "Zuerst Wochentag auswählen!", Toast.LENGTH_SHORT);
                                }
                            }
                        })
                        .setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                newLessonDialog.this.getDialog().cancel();
                            }
                        });
                return builder.create();
            }

            public void onStart()
            {
                super.onStart();

                // This will get the radiogroup
                RadioGroup rGroup = (RadioGroup)getDialog().findViewById(R.id.radioGroup);
                // This will get the radiobutton in the radiogroup that is checked
                RadioButton checkedRadioButton = (RadioButton)rGroup.findViewById(rGroup.getCheckedRadioButtonId());

                rGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
                {
                    public void onCheckedChanged(RadioGroup rGroup, int checkedId)
                    {
                        // This will get the radiobutton that has changed in its check state
                        RadioButton checkedRadioButton = (RadioButton)rGroup.findViewById(checkedId);
                        // This puts the value (true/false) into the variable
                        boolean isChecked = checkedRadioButton.isChecked();
                        // If the radiobutton that has changed in check state is now checked...
                        if (isChecked)
                        {
                            tag = checkedRadioButton.getText().toString();
                        }
                    }
                });
            }
        }

        class existingLessonDialog extends DialogFragment {
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                // Get the layout inflater
                LayoutInflater inflater = getActivity().getLayoutInflater();

                // Inflate and set the layout for the dialog
                // Pass null as the parent view because its going in the dialog layout
                builder.setView(inflater.inflate(R.layout.existing_lesson_dialog, null))
                        // Add action buttons,
                        .setPositiveButton("Neue HA", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {

                            }
                        })
                        .setNeutralButton("Neue KA", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {

                            }
                        })
                        .setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                existingLessonDialog.this.getDialog().cancel();
                            }
                        });
                return builder.create();
            }
        }

和景观布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity$fragmentTab1">

    <TextView
        android:id="@+id/section_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/scrollView"
            android:layout_marginTop="25dp">

        <TableLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

            <TableRow
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/tableRow2">

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="07:45 - 08:30"
                        android:id="@+id/uhrzeit1"
                        android:layout_margin="5dp"
                        android:layout_column="0"
                        android:lines="2"
                        android:textSize="25sp"
                        android:clickable="true"
                        android:onClick="onTextViewClick"/>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Deutsch \n in 404"
                        android:id="@+id/montag1"
                        android:layout_margin="5dp"
                        android:layout_column="1"
                        android:lines="2"
                        android:layout_weight="20"
                        android:textSize="25sp"
                        android:clickable="true"
                        android:onClick="onTextViewClick"
                        android:tag="stunde"/>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="New Text"
                        android:id="@+id/dienstag1"
                        android:layout_margin="5dp"
                        android:layout_column="2"
                        android:lines="2"
                        android:layout_weight="20"
                        android:textSize="25sp"
                        android:clickable="true"
                        android:onClick="onTextViewClick"
                        android:tag="stunde"/>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="New Text"
                        android:id="@+id/mittwoch1"
                        android:layout_margin="5dp"
                        android:layout_column="3"
                        android:lines="2"
                        android:layout_weight="20"
                        android:textSize="25sp"
                        android:clickable="true"
                        android:onClick="onTextViewClick"
                        android:tag="stunde"/>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="New Text"
                        android:id="@+id/donnerstag1"
                        android:layout_margin="5dp"
                        android:layout_column="4"
                        android:lines="2"
                        android:layout_weight="20"
                        android:textSize="25sp"
                        android:clickable="true"
                        android:onClick="onTextViewClick"
                        android:tag="stunde"/>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="New Text"
                        android:id="@+id/freitag1"
                        android:layout_margin="5dp"
                        android:layout_column="5"
                        android:lines="2"
                        android:layout_weight="20"
                        android:textSize="25sp"
                        android:clickable="true"
                        android:onClick="onTextViewClick"
                        android:tag="stunde"/>
            </TableRow>

还有10个像这样的桌子

和肖像布局:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".MainActivity$fragmentTab1">

        <TextView
            android:id="@+id/section_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/scrollView">

            <TableLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">

                <TableRow
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent">

                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="07:45 -\n08:30"
                            android:id="@+id/uhrzeit1p"
                            android:layout_column="0"
                            android:textIsSelectable="false"
                            android:textSize="25sp"
                            android:layout_margin="5dp"
                            android:lines="2"/>

                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="New Text"
                            android:id="@+id/actualLesson1"
                            android:layout_column="1"
                            android:textIsSelectable="false"
                            android:textSize="25sp"
                            android:layout_margin="5dp"
                            android:lines="2"
                            android:layout_weight="50"/>

                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="New Text"
                            android:id="@+id/actualNote1"
                            android:layout_column="2"
                            android:textIsSelectable="false"
                            android:textSize="25sp"
                            android:layout_margin="5dp"
                            android:lines="2"
                            android:layout_weight="50"/>
                </TableRow>

这里还有10个像这样的桌子

最后是logcat:

    08-15 13:02:45.938      438-453/? I/ActivityManager: Displayed de.nathan.android.droidschool/.MainActivity: +6s548ms
    08-15 13:04:10.378  27691-27691/de.nathan.android.droidschool D/AndroidRuntime: Shutting down VM
    08-15 13:04:10.388  27691-27691/de.nathan.android.droidschool W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41760700)
    08-15 13:04:10.408  27691-27691/de.nathan.android.droidschool E/AndroidRuntime: FATAL EXCEPTION: main
            java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3633)
            at android.view.View.performClick(View.java:4240)
            at android.view.View$PerformClick.run(View.java:17721)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
            Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at android.view.View$1.onClick(View.java:3628)
            ... 11 more
            Caused by: java.lang.NullPointerException
            at de.nathan.android.droidschool.MainActivity.onTextViewClick(MainActivity.java:299)
            ... 14 more
    08-15 13:04:10.428      438-665/? W/ActivityManager: Force finishing activity de.nathan.android.droidschool/.MainActivity
    08-15 13:04:10.948      438-454/? W/ActivityManager: Activity pause timeout for ActivityRecord{41ef1e68 u0 de.nathan.android.droidschool/.MainActivity}
    08-15 13:04:21.548      438-454/? W/ActivityManager: Activity destroy timeout for ActivityRecord{41ef1e68 u0 de.nathan.android.droidschool/.MainActivity}
    08-15 13:09:10.448  27691-27691/de.nathan.android.droidschool I/Process: Sending signal. PID: 27691 SIG: 9
if (v.getTag().equals("stunde")) 
   newFragment2.show(getSupportFragmentManager(), "missiles")

这会改变/显示没有commit()的片段; ??

这是可能导致NPE的可能行: if (v.getTag().equals("stunde")) newFragment2.show(getSupportFragmentManager(), "missiles");

第一个TextView没有标签,而其他所有标签都有标签。 因此,无论是添加标记,还是反转if的顺序:

if("stunde".equals(v.get())) {
    newFragment2.show(getSupportFragmentManager(), "missiles");
}

它是由于重复调用oncreate方法,在屏幕方向改变时重新创建xml视图。 你需要停止对方向改变的oncreate的调用。 你可以通过在menifest的activity标签中添加android:configChanges =“keyboard | orientation”来做到这一点。 祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM