Ошибка динамической загрузки фрагментов в приложении Android - PullRequest
1 голос
/ 10 сентября 2011

Я пытаюсь сделать простое приложение на основе Android API FragmentLayout. Вместо того, чтобы менять простое TextView, я хочу иметь возможность переключаться между созданной группой классов, расширяющих класс Fragment.

Я могу статически создать любой из моих примеров в моем файле layout.xml, и фрагмент работает так, как я хочу. Я читал, что вы не можете заменить фрагменты, которые были созданы таким образом, хотя пример приложения показался актуальным, так как он динамически загружает подробный текст. Основное отличие состоит в том, что я не хочу просто создавать новый общий фрагмент, в который я загружаю некоторый текст из файла, я хочу загрузить целые файлы классов (опять же, которые сами являются фрагментами и содержат собственные SurfaveViews).

вот мой макет

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <fragment class="com.android.app.Examples$TitlesFragment"
        android:id="@+id/titles" android:layout_weight="1"
        android:layout_width="0px" android:layout_height="match_parent" />

    <FrameLayout android:id="@+id/fragment_to_switch_dynamically" android:layout_weight="1"
        android:layout_width="0px" android:layout_height="match_parent"
        android:background="?android:attr/detailsElementBackground" />

</LinearLayout>

и вот соответствующие методы из упражнения, где я пытаюсь создать и обновить

    void showDetails(int index) {
        mCurCheckPosition = index;

        if (mDualPane) {
            // We can display everything in-place with fragments, so update
            // the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);

            if (mShownCheckPosition != mCurCheckPosition) {
                // If we are not currently showing a fragment for the new
                // position, we need to create and install a new one.
                PApplet pa = getProcessingSketchByIndex(index);

                // Execute a transaction, replacing any existing fragment
                // with this one inside the frame.
                FragmentTransaction ft = getFragmentManager()
                        .beginTransaction();
                ft.replace(R.id.processing, pa);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
                mShownCheckPosition = index;
            }

        } else {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            // Intent intent = new Intent();
            // intent.setClass(getActivity(), DetailsActivity.class);
            // intent.putExtra("index", index);
            // startActivity(intent);
        }
    }

    private PApplet getProcessingSketchByIndex(int index) {
        PApplet pa = null;
        switch (index) {
        case 0:
            pa = new Lights1();
            break;
        case 1:
            pa = new Lights2();
            break;
        case 2:
            pa = new Reflection();
            break;
        case 3:
            pa = new Rotate();
            break;
        case 4:
            pa = new Spot();
            break;
        case 5:
            break;
        default:
            break;
        }
        return pa;
    }
}

Кажется, все идет хорошо, и я получаю эту ошибку :

E/AndroidRuntime(31393): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.processing.app/com.android.processing.app.ProcessingExamples}:  java.lang.IllegalArgumentException: No view found for id 0x7f050001 for fragment  Lights1{407bf678 #1 id=0x7f050001}
    E/AndroidRuntime(31393):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
    E/AndroidRuntime(31393):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    E/AndroidRuntime(31393):    at android.app.ActivityThread.access$500(ActivityThread.java:122)
    E/AndroidRuntime(31393):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    E/AndroidRuntime(31393):    at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(31393):    at android.os.Looper.loop(Looper.java:132)
    E/AndroidRuntime(31393):    at android.app.ActivityThread.main(ActivityThread.java:4123)
    E/AndroidRuntime(31393):    at java.lang.reflect.Method.invokeNative(Native Method)
     E/AndroidRuntime(31393):   at java.lang.reflect.Method.invoke(Method.java:491)
     E/AndroidRuntime(31393):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
     E/AndroidRuntime(31393):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
     E/AndroidRuntime(31393):   at dalvik.system.NativeStart.main(Native Method)
     E/AndroidRuntime(31393): Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f050001 for fragment Lights1{407bf678 #1 id=0x7f050001}
     E/AndroidRuntime(31393):   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:770)
    E/AndroidRuntime(31393):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977)
    E/AndroidRuntime(31393):    at android.app.BackStackRecord.run(BackStackRecord.java:638)
    E/AndroidRuntime(31393):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1309)
    E/AndroidRuntime(31393):    at android.app.Activity.performStart(Activity.java:4406)
    E/AndroidRuntime(31393):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1788)
    E/AndroidRuntime(31393):    ... 11 more

заранее спасибо за любую помощь

1 Ответ

1 голос
/ 28 декабря 2012

Возможно, потому что R.id.processing не существует в XML представления.

В вашем XML я вижу

<FrameLayout android:id="@+id/fragment_to_switch_dynamically">

Так что, возможно, измените R.id.processing на R.id.fragment_to_switch_dynamically?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...