Java 如何在oncreate活动上设置NavigationDrawer的默认片段
我尝试了很多片段事务方式,但我的默认片段在打开navigationdrawer活动时没有启动Java 如何在oncreate活动上设置NavigationDrawer的默认片段,java,android,navigation-drawer,material-design,Java,Android,Navigation Drawer,Material Design,我尝试了很多片段事务方式,但我的默认片段在打开navigationdrawer活动时没有启动 public class MainActivity extends AppCompatActivity{ private DrawerLayout drawerLayout; private NavigationView navigationView; private int mSelectedId; @Override protected void
public class MainActivity extends AppCompatActivity{
private DrawerLayout drawerLayout;
private NavigationView navigationView;
private int mSelectedId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.tool_bar);
toolbar.setNavigationIcon(R.drawable.nav_icon);
setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
navigationView = (NavigationView)findViewById(R.id.nvView);
setupDrawerContent(navigationView);
mSelectedId = R.id.home;
selectDrawerItem(mSelectedId);
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem.getItemId());
return true;
}
});
}
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// // Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.menu_main, menu);
// return true;
// }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
}
public void selectDrawerItem(int mSelectedId) {
// Create a new fragment and specify the planet to show based on
// position
Fragment fragment = null;
Class fragmentClass;
switch(mSelectedId) {
case R.id.home:
fragmentClass = Main.class;
break;
case R.id.orderhistory:
fragmentClass = Order_history.class;
break;
case R.id.profile:
fragmentClass = Profile.class;
break;
case R.id.contact:
fragmentClass = Contact.class;
break;
case R.id.polices:
fragmentClass = polices.class;
break;
default:
fragmentClass = Main.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.flContent, fragment);
fragmentTransaction.commit();
// Highlight the selected item, update the title, and close the drawer
// menuItem.setChecked(true);
// setTitle(menuItem.getTitle());
drawerLayout.closeDrawers();
}
}
它仍然在启动时首先显示活动。一定要提出建议,这样我才能前进
Activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
tools:context="in.co.blogspot.mellow.mellow.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id= "@+id/tool_bar"
layout= "@layout/tool_bar"></include>
<FrameLayout
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nvView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:menu="@menu/drawer_view" />
</android.support.v4.widget.DrawerLayout>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nvView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:menu="@menu/drawer_view" />
</android.support.v4.widget.DrawerLayout>
我想你可以修改一下你的代码 以这种方式更改方法selectDrawerItem
selectDrawerItem(int mSelectedId)
,这样您就可以接收菜单的id,而不是菜单,因此在onCreate()方法中可以执行类似操作
主要活动
public class MainActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
private NavigationView navigationView;
private int mSelectedId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
navigationView = (NavigationView)findViewById(R.id.nvView);
setupDrawerContent(navigationView);
mSelectedId = R.id.orderhistory;
selectDrawerItem(mSelectedId);
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem.getItemId());
return true;
}
});
}
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// // Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.menu_main, menu);
// return true;
// }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
}
public void selectDrawerItem(int mSelectedId) {
// Create a new fragment and specify the planet to show based on
// position
Fragment fragment = null;
Class fragmentClass;
switch(mSelectedId) {
case R.id.home:
fragmentClass = Main.class;
break;
case R.id.orderhistory:
fragmentClass = Order_history.class;
break;
default:
fragmentClass = Main.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.flContent, fragment);
fragmentTransaction.commit();
// Highlight the selected item, update the title, and close the drawer
// menuItem.setChecked(true);
// setTitle(menuItem.getTitle());
drawerLayout.closeDrawers();
}
}
activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
tools:context="in.co.blogspot.mellow.mellow.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id= "@+id/tool_bar"
layout= "@layout/tool_bar"></include>
<FrameLayout
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nvView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:menu="@menu/drawer_view" />
</android.support.v4.widget.DrawerLayout>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nvView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:menu="@menu/drawer_view" />
</android.support.v4.widget.DrawerLayout>
fragment_order_history.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.enterprise.prueba.Order_history">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="I'm a fragment"/>
</LinearLayout>
已编辑
这很奇怪,现在我用相同的代码创建了一个新项目,这是我在Oncreate()中选择order history时的结果
我更新代码以显示所有文件默认情况下不会调用selectDrawerItem方法。您需要更改流程才能正常工作。drawer_view.xml的内容是什么?其中是否定义了
R.id.home
。每一个碎片都运转良好。我的问题是,当屏幕启动时,它首先显示主活动布局。我需要在启动时显示主片段,而不是显示主活动布局@Terence@abhilnair代码的哪一部分是空的?注意菜单项和设置标题。我删除了这2行,这是我的错误。我解决了空指针问题并尝试了您的建议,但MainActivity仍在启动initially@abhilnair我用索尼xperia p-API16果冻豆作为我的测试设备,更新了我的答案,以显示更新后的codeam的结果。更新代码后,现在导航抽屉项目也无法打开。耶,谢谢,成功了。。实际上,我在主活动中添加了工具栏。现在我转移到每一个片段和它的工作良好。谢谢你的建议@JorgeCasariego
public class Main extends Fragment {
public Main() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, null);
// Inflate the layout for this fragment
return rootView;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="I'm a fragment"/>
</LinearLayout>