实现了ActionBar下面的tab以后,在主题内容中创建ViewPagerw来实现tab和其的关联
布局文件activity_main.xml
<android.support.v4.widget.DrawerLayout 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=".MainActivity"
android:id="@+id/dl">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
>
</android.support.v4.view.ViewPager>
<!-- 抽屉 -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_tab"
android:layout_gravity="left">
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
逻辑代码MainActivity.java首先实现setAdapter的方法,在MainAdapter中继承FragmentStatePagerAdapter,不适用PageAapter是为了实现Fragment判断当前是第一条的时候是HomeFragment,不是的时候是AppFragment,在MyTabListener中tab的监听中根据tab来修改ViewPager
//当tab标签被选中的时候ViewPager切换
mViewPager.setCurrentItem(tab.getPosition());
同时需要ViewPager切换的时候改变Tab的标签,需要在Viewpager中添加监听事件来修改tab
//mViewPager的监听,ViewPaer切换的时候Tab也切换
mViewPager.setOnPageChangeListener(new OnPageChangeListener(){
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
//ViewPager变化以后调用
@Override
public void onPageSelected(int position) {
//为了兼容低版本使用getSupportActionBar(),不适用getSActionBar()
//tab标签一起改变
getSupportActionBar().setSelectedNavigationItem(position);
}
});
MainActivity.java的代码
package com.ldw.market;
import com.ldw.market.fragment.AppFragment;
import com.ldw.market.fragment.HomeFragment;
import junit.framework.AssertionFailedError;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBar.TabListener;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements OnQueryTextListener{
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private PagerTabStrip pager_tab_strip;
private String[] tab_names; // 标签的名字
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
mViewPager=(ViewPager) findViewById(R.id.vp);
mViewPager.setAdapter(new MainAdapter(getSupportFragmentManager()));
//添加tab标签名
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab1=actionBar.newTab().setText("标签一").setTabListener(new MyTabListener());
actionBar.addTab(tab1);
Tab tab2=actionBar.newTab().setText("标签2").setTabListener(new MyTabListener());
actionBar.addTab(tab2);
Tab tab3=actionBar.newTab().setText("标签3").setTabListener(new MyTabListener());
actionBar.addTab(tab3);
Tab tab4=actionBar.newTab().setText("标签4").setTabListener(new MyTabListener());
actionBar.addTab(tab4);
//让拉出显示详情的图片显示,可以拉出详情
actionBar.setDisplayHomeAsUpEnabled(true);
//让按键点击有效
actionBar.setHomeButtonEnabled(true);
//ActionBarDrawerToggle是ActionBar控制抽屉,
//参数1:当前actionBar的Activity,参数2:控制的抽屉,参数3:按钮的图片,参数4和5是描述
drawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
R.string.close_drawer){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
}
};
//设置监听DrawerListener
mDrawerLayout.setDrawerListener(drawerToggle);
// 让开关和actionbar建立关系
drawerToggle.syncState();
//mViewPager的监听,ViewPaer切换的时候Tab也切换
mViewPager.setOnPageChangeListener(new OnPageChangeListener(){
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
//ViewPager变化以后调用
@Override
public void onPageSelected(int position) {
//为了兼容低版本使用getSupportActionBar(),不适用getSActionBar()
//tab标签一起改变
getSupportActionBar().setSelectedNavigationItem(position);
}
});
}
private class MyTabListener implements TabListener{
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction arg1) {
//当tab标签被选中的时候ViewPager切换
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
}
//可以继承PageAapter实现ViePager翻页现在继承FragmentStatePagerAdapter可以实现fragement
private class MainAdapter extends FragmentStatePagerAdapter{
public MainAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
//每一个条目返回的fragment
@Override
public Fragment getItem(int position) {
if(position == 0){
return new HomeFragment();
}else{
return new AppFragment();
}
}
//条目的总数
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
}
//初始化ActionBar的界面
@SuppressLint("NewApi") @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// 如果运行的环境 (部署到什么版本的手机 )大于3.0,低版本的不支持
if (android.os.Build.VERSION.SDK_INT > 11) {
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);// 搜索的监听
}
return true;
}
public void click(View v){
Intent intent = new Intent(getApplicationContext(), DetailActivity.class);
startActivity(intent);
}
/** 处理actionBar菜单条目的点击事件 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
System.out.println("所有");
//当前点击的条目是search
if (item.getItemId() == R.id.action_search) {
Toast.makeText(getApplicationContext(), "搜索", 0).show();
}
//优先处理drawerToggle的点击,drawerToggle出不不了交给父类
return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
}
// 当搜索提交的时候
@Override
public boolean onQueryTextChange(String arg0) {
Toast.makeText(getApplicationContext(), arg0, 0).show();
return false;
}
// 当搜索的文本发生变化
@Override
public boolean onQueryTextSubmit(String arg0) {
Toast.makeText(getApplicationContext(), arg0, 0).show();
return false;
}
}
HomeFragment.java的代码
package com.ldw.market.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class HomeFragment extends Fragment {
//创建一个View对象
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView view=new TextView(getActivity());
view.setText("我是HomeFragment");
return view;
}
}