如何切换到另一个活动以及更改该活动中的片段?

时间:2019-05-01 20:41:19

标签: java android android-fragments

我有一个main_activity,其中包含3个不同的Fragment和一个SlideActivity。我可以在MainActivity中成功地在3个片段之间进行事务处理。

现在,我在MainActivity中添加1个按钮,它将打开SlideActivity。在SlideActivity上,导航栏中有3个按钮,可切换到我已经创建的每个不同片段。

问题是,当我单击导航中的列表按钮时,出现错误,表明

  

找不到片段fragment_main {e1acaf7#0 id = 0x7f080052}的ID 0x7f080052(com.example.learnfragment:id / fragment_container)的视图

似乎它无法通过FrameLayout找到R.id. ID,并且我相信是因为导航按钮在SlideActivity中,并且找不到{{1 }}。

但是我应该怎么做才能切换回MainActivity并更改不同的片段?

这里是MainActivity

navigation_slide_activity.xml

<include layout="@layout/app_bar_slide" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_slide" app:menu="@menu/activity_slide_drawer" />

Navigation_Slide_Activity.java

还有public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_home) { // Navigate back to the Main Fragment FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, new fragment_main()); ft.commit(); } }

main_activity.xml

最后,<FrameLayout android:id="@+id/fragment_container" android:layout_width="392dp" android:layout_height="496dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" />

MainActivity.java

1 个答案:

答案 0 :(得分:0)

在您的public static中获得一个MainActivity变量。

public static int FRAGMENT_TO_BE_LOADED = 0;

现在从SlideActivity中将变量设置为一个数字(例如3,即您要在返回MainActivity时移至第三个片段。

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        MainActivity.FRAGMENT_TO_BE_LOADED = 3; 
        finish();
    }
}

现在您的MainActivity中需要有一个onResume函数,该函数将检查变量并相应地加载片段。

@Override
protected void onResume() {
    super.onResume();

    if(FRAGMENT_TO_BE_LOADED == 1) loadFragment1();
    else if(FRAGMENT_TO_BE_LOADED == 2) loadFragment2();
    else if(FRAGMENT_TO_BE_LOADED == 3) loadFragment3();
}

希望能解决您的问题。