如何在应用加载时实现默认活动(片段).(抽屉布局)



我正在使用片段并成功设置了所有活动。一切都功能齐全。

我的问题是,当应用程序最初启动时,我似乎无法加载默认布局或片段类。

我尝试了几种方法,结果很奇怪。这是我来自MainActivity的代码。

public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, 
R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) 
findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Fragment fragment = null;

if (id == home) {
fragment = new Home();
} else if (id == services) {
fragment = new Services();
} else if (id == beforeAfter) {
fragment = new BeforeAfter();
} else if (id == staff) {
fragment = new Staff();
} else if (id == patientInfo) {
fragment = new Patient();
} else if (id == blog) {
fragment = new Blog();
} else if (id == contactUs) {
fragment = new Contact();
}
if (fragment != null) {
android.support.v4.app.FragmentManager fragmentManager = 
getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.screen_area, fragment);
ft.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}

这是我的主页片段代码.class

public class Home extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.home, null);
}

}

编辑我的MainActivityjava 文件并附加onCreate

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.screen_area, new Home());
ft.commit();

它现在可以工作了。我想我正在为主页片段分配 XML 布局页面的名称,而不是 content_main 下框架布局的 ID。

调用onCreate中的片段

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, new Fragment1());
ft.commit();

你的代码看起来不错。我想问题出在你的activity_main.xml

确保您在DrawerLayout内只有两个孩子 一个用于您的主容器,一个用于NavigationView

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/my_navigation_items" />
</android.support.v4.widget.DrawerLayout>

您需要在里面显示您的片段onCreate

FragmentTransaction mFragmentTransaction = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, new YourFragment());
ft.commit(); //important

最新更新