Фрагмент приложения вылетает при запуске из истории - PullRequest
0 голосов
/ 14 сентября 2018

При попытке загрузить приложение из History.

я получаю следующее исключение

Причина: android.view.InflateException: строка двоичного XML-файла # 0: Ошибка надувания фрагмента класса. Вызвано: java.lang.IllegalStateException: фрагменты. EventFragment не создать вид.

Приложение работает нормально, когда я запускаю его с app icon.

У меня есть базовый класс, и каждое действие происходит от базового класса. Я делюсь структурой кода,

BaseActivity.class

    public abstract class BaseActivity extends AppCompatActivity {

        public abstract int getContentViewId();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(getContentViewId());  //crash  happening on this line
            onCreateFromParent(savedInstanceState);
}

MainActivity.class

public class HomeActivity extends BaseActivity{


    @Override
    public int getContentViewId() {
        return R.layout.activity_main;
    }


    @Override
    protected void onCreateFromParent(Bundle savedInstanceState) {


    }

layout.xml

    <include
        android:id="@+id/include"
        layout="@layout/content_main"
 />

content_main

    <fragment
        android:id="@+id/fragment"
        android:name="com.fragments.EventFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

Фрагмент

public class EventFragment extends Fragment {

    public EventFragment() {
        // Required empty public constructor
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

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

        View view= inflater.inflate(R.layout.fragment_event, container, false);
        HomeActivity activity= (HomeActivity) getActivity();

EDIT

FRAGMENT_EVENT

   //Constraint Layout

    <android.support.design.widget.TabLayout
        style="@style/AppTabLayout"
        app:tabTextAppearance="@style/AppTabTextAppearance"
        app:tabBackground="@drawable/tab_selector"
        android:id="@+id/tablayout_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:tabGravity="fill"
        app:tabMode="fixed"
        ></android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager_id"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tablayout_id">

    </android.support.v4.view.ViewPager>

1 Ответ

0 голосов
/ 14 сентября 2018

Попробуйте код ниже. После того, как фрагмент создан из макета, вам нужно удалить его, прежде чем накачать его обратно

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id. fragment);
    if(fragment != null) {
        ft.remove(fragment);
        ft.commit();
    }
    setContentView(getContentViewId());  //crash  happening on this line
    onCreateFromParent(savedInstanceState);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...