问题描述
我是新android开发,我的导航抽屉从此的
现在我想补充Tabhost与it..can谁能帮我呢?以下是我的code我tried..I不知道这是不是说明为什么。
公共类MainActivity扩展FragmentActivity {
私人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.activity_main);
mTitle = mDrawerTitle =的getTitle();
//负荷滑动菜单项
navMenuTitles = getResources()getStringArray(R.array.nav_drawer_items)。
//导航抽屉,从资源的图标
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList =(ListView控件)findViewById(R.id.list_slidermenu);
navDrawerItems =新的ArrayList< NavDrawerItem>();
//添加导航抽屉里的物品数组
// 家
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons
.getResourceId(0,-1)));
//查找人员
navDrawerItems.add(新NavDrawerItem(navMenuTitles [1],navMenuIcons
.getResourceId(1,-1)));
//照片
navDrawerItems.add(新NavDrawerItem(navMenuTitles [2],navMenuIcons
.getResourceId(2,-1)));
//社区,这里将添加计数器
navDrawerItems.add(新NavDrawerItem(navMenuTitles [3],navMenuIcons
.getResourceId(3,-1)));
//网页
navDrawerItems.add(新NavDrawerItem(navMenuTitles [4],navMenuIcons
.getResourceId(4,-1)));
//热点,我们将在这里添加计数器
navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons
.getResourceId(5,-1)));
//回收类型数组
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(新SlideMenuClickListener());
//设置导航抽屉名单适配器
适配器=新NavDrawerListAdapter(getApplicationContext()
navDrawerItems);
mDrawerList.setAdapter(适配器);
//使操作栏中的应用程序图标,它表现为切换按钮
getActionBar()setDisplayHomeAsUpEnabled(假)。
getActionBar()setHomeButtonEnabled(真)。
mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout,
R.drawable.ic_drawer,//导航菜单切换图标
R.string.app_name,//导航抽屉打开 - 说明
//访问
R.string.app_name //导航抽屉关闭 - 说明
//访问
){
公共无效onDrawerClosed(查看视图){
。getActionBar()的setTitle(mTitle);
//调用prepareOptionsMenu()来显示操作栏图标
getActionBar()的setIcon(R.drawable.ic_drawer)。
invalidateOptionsMenu();
}
公共无效onDrawerOpened(查看drawerView){
。getActionBar()的setTitle(mDrawerTitle);
//调用prepareOptionsMenu()隐藏操作栏图标
getActionBar()的setIcon(R.drawable.ic_drawer)。
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState == NULL){
//关于第一导航项目首次显示视图
displayView(0);
}
}
私有类SlideMenuClickListener工具
ListView.OnItemClickListener {
@覆盖
公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
长ID){
对选定的导航抽屉的项目//显示视图
displayView(位置);
}
}
@覆盖
公共布尔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(菜单);
}
/ **
* Diplaying片段视图选择导航抽屉列表项
* * /
私人无效displayView(INT位置){
//更新替换片段的主要内容
片段片段= NULL;
开关(位置){
情况下0:
片段=新HomeFragment();
打破;
/* 情况1:
片段=新FindPeopleFragment();
打破;
案例2:
片段=新PhotosFragment();
打破;
案例3:
片段=新CommunityFragment();
打破;
壳体4:
片段=新PagesFragment();
打破;
壳体5:
片段=新WhatsHotFragment();
打破;
* /
默认:
打破;
}
如果(片段!= NULL){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container,片段).commit();
//更新所选项目和标题,然后关上抽屉
mDrawerList.setItemChecked(位置,真正的);
mDrawerList.setSelection(位置);
的setTitle(navMenuTitles [位置]);
mDrawerLayout.closeDrawer(mDrawerList);
} 其他 {
//创建片段错误
Log.e(MainActivity,创建片段错误);
}
}
@覆盖
公共无效的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);
}
}
Homefragment
公共类HomeFragment扩展片段{
私人FragmentTabHost mTabHost;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
mTabHost =新FragmentTabHost(getActivity());
mTabHost.setup(getActivity(),getChildFragmentManager(),R.layout.fragment_home);
捆绑ARG1 =新包();
arg1.putInt(精氨酸为Frag1,1);
mTabHost.addTab(mTabHost.newTabSpec(TAB1)。setIndicator(破片TAB1),
PhotosActivity.class,ARG1);
捆绑ARG2 =新包();
arg2.putInt(精氨酸为Frag2,2);
mTabHost.addTab(mTabHost.newTabSpec(TAB2)。setIndicator(破片TAB2),
PhotosActivity.class,ARG2);
返回mTabHost;
}
@覆盖
公共无效onDestroyView(){
super.onDestroyView();
mTabHost = NULL;
}
fragment_home.xml
< TabHost的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:ID =@机器人:ID / tabhost>
<的LinearLayout
机器人:ID =@ + ID / LinearLayout01
机器人:方向=垂直
机器人:layout_height =FILL_PARENT
机器人:layout_width =FILL_PARENT>
< TabWidget
机器人:ID =@机器人:ID /标签
机器人:layout_height =WRAP_CONTENT
机器人:layout_width =FILL_PARENT>
< / TabWidget>
< android.support.v4.view.ViewPager
机器人:ID =@ + ID / view_pager
机器人:layout_width =match_parent
机器人:layout_height =match_parent/>
<的FrameLayout
机器人:ID =@机器人:ID / tabcontent
机器人:layout_height =FILL_PARENT
机器人:layout_width =FILL_PARENT>
< /的FrameLayout>
< / LinearLayout中>
< / TabHost>
因此,为了做到这一点修改这样的HomeFragment:
公共类HomeFragment扩展片段{
私人TabHost mTabHost;
私人ViewPager mViewPager;
私人TabsPagerAdapter mTabsAdapter;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
查看rootView = inflater.inflate(R.layout.fragment_home,集装箱,假);
mViewPager =(ViewPager)rootView.findViewById(R.id.pager);
mTabsAdapter =新YourAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mTabsAdapter);
PagerSlidingTabStrip标签=(PagerSlidingTabStrip)rootView.findViewById(R.id.tabs);
tabs.setViewPager(寻呼机);
返回rootView;
}
您的适配器类
公共类YourAdapter扩展FragmentStatePagerAdapter {
私有String []标题= {项目1,项目2,3项};
公共YourAdapter(FragmentManager FM){
超(FM);
}
@覆盖
公共片段的getItem(int i)以{
开关(ⅰ){
情况下0:{
返回新FragementA();
}情况1:{
返回新FragmentB();
}案例2:{
返回新FragmentC();
}
}
}
@覆盖
公众诠释getCount将(){
返回titles.length;
}
@覆盖
公共CharSequence的getPageTitle(INT位置){
回到标题[位置]
}
}
对于viewpager您的布局文件:
编译这个依赖,才能使用它:编译'com.astuetz:pagerslidingtabstrip:1.0.1
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:方向=垂直>
< com.astuetz.PagerSlidingTabStrip
机器人:ID =@ + ID /标签
机器人:layout_width =match_parent
机器人:layout_height =48dip/>
< android.support.v4.view.ViewPager
机器人:ID =@ + ID /寻呼机
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT/>
< / LinearLayout中>
该viewpager将为每个标签的片段将是这样的:
公共类碎裂扩展片段{
@覆盖
公共查看onCreateView(LayoutInflater充气,
ViewGroup中的容器,包savedInstanceState){
查看rootView = inflater.inflate(R.layout.my_layout_file,集装箱,假);
//简单的实现如何定位文本视图在布局
按钮电视=(按钮)rootView.findViewById(R.id.my_button_view);
返回rootView;
}
}
和布局:
< RelativeLayout的的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:layout_width =match_parent
机器人:后台=#CCC
机器人:layout_height =match_parent>
<按钮
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:文本=新按钮
机器人:ID =@ + ID / my_button_view
机器人:layout_marginTop =175dp/>
< / RelativeLayout的>
我希望它能帮助!!!!
I am new to android development,I used navigation drawer from this http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/
Now I want to add Tabhost with it..can anyone help me with this?The following is my code I tried..I do not know It is not showing why..
public class MainActivity extends FragmentActivity {
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.activity_main);
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
.getResourceId(0, -1)));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons
.getResourceId(1, -1)));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons
.getResourceId(2, -1)));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons
.getResourceId(3, -1)));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons
.getResourceId(4, -1)));
// What's hot, We will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons
.getResourceId(5, -1)));
// Recycle the typed array
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// 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(false);
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
getActionBar().setIcon(R.drawable.ic_drawer);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
getActionBar().setIcon(R.drawable.ic_drawer);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
}
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);
}
}
@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);
}
/**
* 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 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 = getSupportFragmentManager();
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");
}
}
@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);
}
}
Homefragment
public class HomeFragment extends Fragment {
private FragmentTabHost mTabHost;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mTabHost = new FragmentTabHost(getActivity());
mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.fragment_home);
Bundle arg1 = new Bundle();
arg1.putInt("Arg for Frag1", 1);
mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("Frag Tab1"),
PhotosActivity.class, arg1);
Bundle arg2 = new Bundle();
arg2.putInt("Arg for Frag2", 2);
mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("Frag Tab2"),
PhotosActivity.class, arg2);
return mTabHost;
}
@Override
public void onDestroyView() {
super.onDestroyView();
mTabHost = null;
}
fragment_home.xml
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabhost">
<LinearLayout
android:id="@+id/LinearLayout01"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
</TabWidget>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</FrameLayout>
</LinearLayout>
</TabHost>
So in order to do this modify the HomeFragment like this:
public class HomeFragment extends Fragment {
private TabHost mTabHost;
private ViewPager mViewPager;
private TabsPagerAdapter mTabsAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
mViewPager = (ViewPager)rootView.findViewById(R.id.pager);
mTabsAdapter= new YourAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mTabsAdapter);
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip)rootView.findViewById(R.id.tabs);
tabs.setViewPager(pager);
return rootView;
}
Your Adapter Class
public class YourAdapter extends FragmentStatePagerAdapter {
private String[] titles = { "Item 1", "Item 2", "Item 3" };
public YourAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch(i){
case 0:{
return new FragementA();
}case 1:{
return new FragmentB();
}case 2:{
return new FragmentC();
}
}
}
@Override
public int getCount() {
return titles.length;
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
Your layout file for the viewpager:
Compile this dependency in order to use it: compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.astuetz.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="48dip" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
The Fragment that the viewpager will create for each tab will be like:
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.my_layout_file, container, false);
//Simple implementation how to target text view in your layout
Button tv = (Button)rootView.findViewById(R.id.my_button_view);
return rootView;
}
}
And the layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="#ccc"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/my_button_view"
android:layout_marginTop="175dp" />
</RelativeLayout>
I hope it helps!!!!
这篇关于如何添加tabhost导航抽屉?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!