Android: пакет совместимости Fragment crash - PullRequest
1 голос
/ 04 августа 2011

Я пытаюсь использовать пакет совместимости Android для создания обратно совместимого приложения, которое использует фрагменты.Тем не менее, он падает, когда я запускаю его на эмуляторе Android v2.2.Он не падает на моем Xoom (v3.2).Я подозреваю, что тег фрагмента в main.xml может быть причиной:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <fragment android:name="com.companyname.appname.MainMenuFragment"
        android:id="@+id/mainMenu"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="fill_parent" />
</LinearLayout>

Вот FragmentActivity:

package com.companyname.appname;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

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

А вот фрагмент:

package com.companyname.appname;

import android.support.v4.app.Fragment;

public class MainMenuFragment extends Fragment {

}

Есть идеи?

Спасибо

РЕДАКТИРОВАТЬ: я настроил API уровня 8 (Android v2.2)

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Спасибо, smith324 и LeffelMania.Ошибка logcat показала эту ошибку: 08-03 22: 03: 22.946: ОШИБКА / AndroidRuntime (938): вызвано: java.lang.IllegalStateException: фрагмент com.companyname.appname.MainMenuFragment не создал представление.Поэтому я переопределил onCreateView () в своем классе MainMenuFragment и вернул ему View, и это сработало.Странно, что он не потерпел крах в v3.2.

1 голос
/ 10 апреля 2012

Иногда вы не хотите, чтобы пользовательский интерфейс был прикреплен к вашему фрагменту. Например, в моем приложении у меня есть фрагмент, отвечающий за пункт меню, используемый в качестве вида действия на панели действий. В этом случае вы не можете реализовать onCreateView().

Как описано в руководстве пользователя Фрагмент Android в разделе «Добавление фрагмента без пользовательского интерфейса», вы должны добавить фрагмент к его действию программно.

Вот код, который я использую в своей деятельности:

// Add the address bar fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(addressBarFragment,"address_bar_fragment");
fragmentTransaction.commit();

Примечание 1: Я использую getSupportFragmentManager() вместо getFragmentManager(), потому что я использую библиотеку совместимости.
Примечание 2: new Fragment () не вызывается в моем примере, потому что я использую Roboguice для внедрения зависимостей.

...