我有一个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
答案 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();
}
希望能解决您的问题。