186.m1-ActionBar的Tab和ViewPager的关联

实现了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;
		
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值