Android 带导航抽屉的viewpager
我试图在导航抽屉中实现带有和不带viewpager的片段。以下是我努力实现的目标: 1个带导航抽屉的应用程序,有3个菜单:仪表板、费用、收入 2“dashboard”只是一个普通的片段,只有一个页面,或者我应该怎么称呼它,没有viewpager 3费用和收入是包含viewpager的另一个片段;费用每天有2个定期查看页面,而收入每天有3个定期查看页面 这是我的部分代码,我刚刚修改了Android Studio beta在选择NavigationDrawer项目时生成的代码:Android 带导航抽屉的viewpager,android,android-viewpager,navigation-drawer,Android,Android Viewpager,Navigation Drawer,我试图在导航抽屉中实现带有和不带viewpager的片段。以下是我努力实现的目标: 1个带导航抽屉的应用程序,有3个菜单:仪表板、费用、收入 2“dashboard”只是一个普通的片段,只有一个页面,或者我应该怎么称呼它,没有viewpager 3费用和收入是包含viewpager的另一个片段;费用每天有2个定期查看页面,而收入每天有3个定期查看页面 这是我的部分代码,我刚刚修改了Android Studio beta在选择NavigationDrawer项目时生成的代码: MyActivity
MyActivity.java
public class MyActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit();
}
}
NavigationDrawerFragment.java
public class NavigationDrawerFragment extends Fragment {
private void selectItem(int position) {
Fragment fragment = null;
mCurrentSelectedPosition = position;
if (mDrawerListView != null) {
mDrawerListView.setItemChecked(position, true);
}
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
if (mCallbacks != null) {
mCallbacks.onNavigationDrawerItemSelected(position);
}
switch (position) {
case 0:
fragment = new Dashboard();
break;
case 1:
fragment = new Expenses();
break;
case 2:
fragment = new Income();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
} else {
Log.e("NavigationDrawerFragment.java", "Error in creating fragment");
}
}
}
Expenses.java
public class Expenses extends Fragment{
private class MyPageAdapter extends FragmentPagerAdapter{
private final String[] TITLES = { "Daily", "Recurring"};
public MyPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
@Override
public int getCount() {
return TITLES.length;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return ExpensesDaily();
case 1:
return ExpensesRecurring;
}
}
}
}
但我仍然不知道如何实现expenses.java,当我们从NavigationDrawer中选择“expenses”菜单时,会调用它。java应该实现ViewPager,它应该有2个页面,这是每日和定期的。非常感谢您的帮助。谢谢
更新1:
我试图使Expenses.java扩展FragmentActivity,但我们似乎无法使用以下代码从NavigationDrawer调用另一个活动:
switch (position) {
case 0:
fragment = new Dashboard();
break;
case 1:
fragment = new Expenses();
break;
case 2:
fragment = new Income();
break;
default:
break;
}
即使可以完成,那也不是我想要的,因为打开另一个活动就像打开一个新窗口,对吗?我也在处理相同的需求这里是我的演示代码,希望它能在开发阶段帮助您 经过这么多的研究,我终于解决了这个问题,并实现了我想要的目标
您遇到的问题是,您希望一些顶级片段,即ExpensesFragment和IncomeFragment,在ViewPager的页面中使用更多片段,因为您已经定义了FragmentPagerAdapter实现 当你实例化FragmentPagerAdapter时,你给它一个FragmentManager。我相信您需要在顶级片段中使用getChildFragmentManager,例如:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
MyPageAdapter adapter = new MyPageAdapter(getChildFragmentManager());
viewPager.setAdapter(adapter);
}
这将提供特定于此特定片段的FragmentManager实例,并用于管理嵌套片段。这将对您有所帮助。我也有同样的问题。这对我有用