Сложности с базовым расположением фрагментов - PullRequest
3 голосов
/ 08 ноября 2011

Я пытаюсь разобраться с фрагментами, чтобы мои приложения были подготовлены для ICS.

У меня есть следующие файлы, чтобы получить самое простое приложение с фрагментами, которое вы можете иметь. Это должно иметь при запуске: один макет фрагмента с текстовым представлением «Фрагмент 1» и рядом с ним другой макет фрагмента с «фрагментом 2».

Мое имя пакета com.mwerner.fragments

Мои файлы:

  • FragmentsActivity.java
  • examplesFragment.java
  • examplesFragment2.java
  • examples_fragment.xml
  • examples_fragment2.xml
  • main.xml

Код для FragmentsActivity.java:

package com.mwerner.fragments;

import android.app.Activity;
import android.os.Bundle;

public class FragmentsActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

ExamplesFragment.java

package com.mwerner.fragments;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ExamplesFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.examples_fragment, container, false);
    }
}

examplesFragment2.java

package com.mwerner.fragments;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ExamplesFragment2 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.examples_fragment2, container, false);
    }
}

Файлы examples_fragment.xml просто имеют линейный макет с текстовым представлением ... Вот код для main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<fragment
        class="com.mwerner.fragments$ExamplesFragment"
        android:id="@+id/list"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
         />

<fragment 
        class="com.mwerner.fragments$ExamplesFragment2"
        android:id="@+id/viewer"
        android:layout_weight="2"
        android:layout_width="0dp"
        android:layout_height="fill_parent" />


</LinearLayout>

Приложение вылетает при запуске с ошибкой

11-07 18:12:12.519: E/AndroidRuntime(696): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mwerner.fragments/com.mwerner.fragments.FragmentsActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment

Подскажите, пожалуйста, что здесь не так? Я в значительной степени скопировал / вставил код со страницы разработчиков Google для фрагментов.

Ответы [ 3 ]

5 голосов
/ 08 ноября 2011

Вы неправильно указали путь к своим фрагментам в макете XML.Исправьте атрибуты класса.Попробуйте это:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<fragment
        class="com.mwerner.fragments.ExamplesFragment"
        android:id="@+id/list"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
         />

<fragment 
        class="com.mwerner.fragments.ExamplesFragment2"
        android:id="@+id/viewer"
        android:layout_weight="2"
        android:layout_width="0dp"
        android:layout_height="fill_parent" />


</LinearLayout>
0 голосов
/ 10 июля 2012

Когда я писал свою первую программу на Фрагментах, использовал ту же ошибку.Вместо того, чтобы расширять «Activity», добавьте «FragmentActivity» в вашу активность запуска.

0 голосов
/ 13 декабря 2011

Попробуйте расширить FragmentActivity

  public class FragmentsActivity extends FragmentActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    }
...