的OnClick为navigationDrawer不加载新的片段 [英] OnClick for navigationDrawer not loading new fragments
问题描述
我一直在试图建立一个navigationDrawer我的项目。我一直在关注本次审查在这里:
的http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/
我一直在编辑codeA位,用我自己的布局,以便采取了图标和通知导航抽屉里。我只需要一个简单的。
我的抽屉里主要的工作除了onCLicks。我没有收到任何错误,但是当我点击我的NavDrawer一个项目它不会加载新的片段。我没有收到任何错误。这是我的code:
MainDrawer2:
公共类MainDrawer2延伸活动{
私人DrawerLayout mDrawerLayout;
私人的ListView mDrawerList;
私人ActionBarDrawerToggle mDrawerToggle;
//导航抽屉称号
私人的CharSequence mDrawerTitle;
//用于存储应用程序标题
私人的CharSequence mTitle;
//滑动菜单项
私有String [] navMenuTitles;
私人TypedArray navMenuIcons;
私人的ArrayList< NavDrawerItem> navDrawerItems;
私人NavDrawerListAdapter适配器;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.fragment_main);
mTitle = mDrawerTitle =的getTitle();
//负荷滑动菜单项
navMenuTitles = getResources()getStringArray(R.array.nav_drawer_items)。
//导航抽屉,从资源的图标
mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList =(ListView控件)findViewById(R.id.drawer);
navDrawerItems =新的ArrayList< NavDrawerItem>();
//添加导航抽屉里的物品数组
// 家
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0]));
//查找人员
navDrawerItems.add(新NavDrawerItem(navMenuTitles [1]));
//设置导航抽屉名单适配器
适配器=新NavDrawerListAdapter(getApplicationContext()
navDrawerItems);
mDrawerList.setAdapter(适配器);
//使操作栏中的应用程序图标,它表现为切换按钮
getActionBar()setDisplayHomeAsUpEnabled(真)。
//getActionBar().setHomeButtonEnabled(true);
mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout,
R.drawable.ic_drawer,//导航菜单切换图标
R.string.app_name,//导航抽屉打开 - 说明访问
R.string.app_name //导航抽屉关闭 - 说明访问
){
公共无效onDrawerClosed(查看视图){
。getActionBar()的setTitle(mTitle);
//调用prepareOptionsMenu()来显示操作栏图标
invalidateOptionsMenu();
}
公共无效onDrawerOpened(查看drawerView){
。getActionBar()的setTitle(mDrawerTitle);
//调用prepareOptionsMenu()隐藏操作栏图标
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState == NULL){
//关于第一导航项目首次显示视图
displayView(0);
}
}
/ **
* Diplaying片段视图选择导航抽屉列表项
* * /
私人无效displayView(INT位置){
//更新替换片段的主要内容
片段片段= NULL;
开关(位置){
情况下0:
片段=新StatisticsPage();
打破;
情况1:
片段=新发现();
打破;
默认:
打破;
}
如果(片段!= NULL){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main,片段).commit();
//更新所选项目和标题,然后关上抽屉
mDrawerList.setItemChecked(位置,真正的);
mDrawerList.setSelection(位置);
的setTitle(navMenuTitles [位置]);
mDrawerLayout.closeDrawer(mDrawerList);
} 其他 {
//创建片段错误
Log.e(MainActivity,创建片段错误);
}
}
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
。getMenuInflater()膨胀(R.menu.main,菜单);
返回true;
}
@覆盖
公共布尔onOptionsItemSelected(菜单项项){
//切换导航抽屉选择操作栏中的应用程序图标/标题
如果(mDrawerToggle.onOptionsItemSelected(项目)){
返回true;
}
//手柄操作栏操作点击
开关(item.getItemId()){
案例R.id.action_settings:
返回true;
默认:
返回super.onOptionsItemSelected(项目);
}
}
/ ***
*当调用invalidateOptionsMenu()被触发
* /
@覆盖
公共布尔prepareOptionsMenu(功能菜单)在{
//如果导航抽屉被打开,隐藏行动项目
布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(drawerOpen!);
返回super.on prepareOptionsMenu(菜单);
}
@覆盖
公共无效的setTitle(CharSequence的标题){
mTitle =称号;
。getActionBar()的setTitle(mTitle);
}
/ **
*当使用ActionBarDrawerToggle,你必须在调用它
* onPostCreate()和onConfigurationChanged()...
* /
@覆盖
保护无效onPostCreate(包savedInstanceState){
super.onPostCreate(savedInstanceState);
//同步发生onRestoreInstanceState后切换状态。
mDrawerToggle.syncState();
}
@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
super.onConfigurationChanged(NEWCONFIG);
//传递任何配置更改抽屉toggls
mDrawerToggle.onConfigurationChanged(NEWCONFIG);
}
}
在我的琴弦XML NavDrawer菜单项:
家 发现
fragment_main XML:
< android.support.v4.widget.DrawerLayout的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:ID =@ + ID / drawer_layout
机器人:layout_width =match_parent
机器人:layout_height =match_parent
工具:上下文=MainActivity。>
<的FrameLayout
机器人:ID =@ + ID /主
机器人:layout_width =match_parent
机器人:layout_height =match_parent>
< /的FrameLayout>
<的ListView
机器人:ID =@ + ID /抽屉
机器人:layout_width =240dp
机器人:layout_height =match_parent
机器人:layout_gravity =开始
机器人:背景=@机器人:彩色/黑白
机器人:choiceMode =singleChoice/>
< /android.support.v4.widget.DrawerLayout>
您是缺少
mDrawerList.setOnItemClickListener(新SlideMenuClickListener());
和
私有类SlideMenuClickListener工具
ListView.OnItemClickListener {
@覆盖
公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
长ID){
对选定的导航抽屉的项目//显示视图
displayView(位置);
}
}
和
私人无效displayView(INT位置){
//更新替换片段的主要内容
片段片段= NULL;
开关(位置){
情况下0:
片段=新HomeFragment();
打破;
情况1:
片段=新FindPeopleFragment();
打破;
案例2:
片段=新PhotosFragment();
打破;
案例3:
片段=新CommunityFragment();
打破;
壳体4:
片段=新PagesFragment();
打破;
壳体5:
片段=新WhatsHotFragment();
打破;
默认:
打破;
}
如果(片段!= NULL){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container,片段).commit();
//更新所选项目和标题,然后关上抽屉
mDrawerList.setItemChecked(位置,真正的);
mDrawerList.setSelection(位置);
的setTitle(navMenuTitles [位置]);
mDrawerLayout.closeDrawer(mDrawerList);
} 其他 {
//创建片段错误
Log.e(MainActivity,创建片段错误);
}
}
从您提供的链接。
如果您还没有一个点击监听你怎么能指望它的工作?
I have been trying to create a navigationDrawer for my project. I have been following this review here:
http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/
I have been editing the code a bit, to use my own layout, in order to take out the icons and notifications in the navigation drawer. I just needed a simple one.
I have the drawer mostly working except for the onCLicks. I am not getting any errors, but when I click an item in my NavDrawer it does not load the new fragment. I am not getting any error. Here is my code:
MainDrawer2:
public class MainDrawer2 extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.drawer);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0]));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1]));
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
//getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
){
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
}
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new StatisticsPage();
break;
case 1:
fragment = new Discover();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/***
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
NavDrawer Menu items in my strings xml:
Home Discover
fragment_main xml:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<FrameLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<ListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/black"
android:choiceMode="singleChoice"/>
</android.support.v4.widget.DrawerLayout>
You are missing
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
and
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
and
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new FindPeopleFragment();
break;
case 2:
fragment = new PhotosFragment();
break;
case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new WhatsHotFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
from the link you provided.
If you don't have a click listener how do you expect it to work?
这篇关于的OnClick为navigationDrawer不加载新的片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!