ListFragment onCreateView не вызывается

Я пытаюсь использовать FragmentManager для замены фрагмента, но по какой-то причине OnCreateView() не называется.

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

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FeedbackListFragment listFragment = new FeedbackListFragment();
fragmentTransaction.replace(R.id.feedback_placeholder, listFragment);
fragmentTransaction.commit();

Это код для FeedbackListFragment:

public class FeedbackListFragment extends ListFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.d(TAG,"create feedbacklistview");
        View view = inflater.inflate(R.layout.feedback_popup, container, false);
        return view;
    }
}

Это мой основной макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@color/background_normal"
              android:id="@+id/main_layout">

    <FrameLayout
        android:id="@+id/feedback_placeholder"
        android:layout_width="match_parent"
        android:visibility="gone"
        android:layout_height="match_parent"></FrameLayout>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="90dp"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="@string/overview_scan_text"
            android:id="@+id/scantagLabel"
            android:layout_gravity="center"
            android:gravity="center"
            android:textSize="42sp"
            android:textIsSelectable="false"/>
    <ImageView
            android:layout_width="match_parent"
            android:layout_height="180dp"
            android:id="@+id/cleanjack_image"
            android:src="@drawable/logo_clean_jack"
            android:layout_gravity="left|center_vertical"
            android:contentDescription="@string/app_name"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="20dp"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text=""
            android:id="@+id/messageLabel"
            android:layout_gravity="center"
            android:gravity="center"
            android:textSize="20sp"
            android:textIsSelectable="false"/>
</LinearLayout>

Я удалил android:visibility="gone" чтобы увидеть, если это была проблема, но это не сработало.

2 ответа

Решение

Я попробовал ваш пример кода

Деятельность:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_list);

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    FeedbackListFragment listFragment = new FeedbackListFragment();
    fragmentTransaction.replace(R.id.feedback_placeholder, listFragment);
    fragmentTransaction.commit();
}

FragmentList:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.feedback_popup, container, false);
    return view;
}

XML Activity

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#bcbcbc"
    android:id="@+id/main_layout">

    <FrameLayout
        android:id="@+id/feedback_placeholder"
        android:layout_width="match_parent"
        android:visibility="gone"
        android:layout_height="match_parent"></FrameLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="90dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="overview_scan_text"
        android:id="@+id/scantagLabel"
        android:layout_gravity="center"
        android:gravity="center"
        android:textSize="42sp"
        android:textIsSelectable="false"/>
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:id="@+id/cleanjack_image"
        android:src="@drawable/ic_launcher_background"
        android:layout_gravity="left|center_vertical"
        android:contentDescription="@string/app_name"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="20dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text=""
        android:id="@+id/messageLabel"
        android:layout_gravity="center"
        android:gravity="center"
        android:textSize="20sp"
        android:textIsSelectable="false"/>
</LinearLayout>

Фрагмент XML

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


    <ListView

        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</android.support.constraint.ConstraintLayout>

Вы установили идентификатор listView для фрагмента списка в

android:id="@android:id/list"

Надеюсь, что это полезно:)

Из документации по onCreateView в ListFragment:

Обеспечить реализацию по умолчанию для возврата простого списка. Подклассы могут переопределить, чтобы заменить их собственным макетом. В этом случае возвращаемая иерархия представлений должна иметь ListView с идентификатором {@link android.R.id#list android.R.id.list} и, при желании, может иметь идентификатор идентификатора родного брата {@link android.R.id#empty android.R.id.empty}, который должен отображаться, когда список пуст.

Если вы переопределяете этот метод своим собственным пользовательским контентом, рассмотрите возможность включения стандартного макета {@link android.R.layout#list_content} в файл макета, чтобы вы продолжали сохранять все стандартное поведение ListFragment. В частности, в настоящее время это единственный способ показать встроенное неопределенное состояние прогресса.

Другие вопросы по тегам