ActionBar切换ViewPager

ViewPager

自带滑动效果

  1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

  2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

  3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。




1.action_main.xml

  1. <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:id="@+id/drawerlayout"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     tools:context=".MainActivity" >  
  7. <strong>  
  8.     <android.support.v4.view.ViewPager  
  9.         android:id="@+id/vp"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="match_parent"  
  12.         android:layout_centerHorizontal="true"  
  13.         android:layout_centerVertical="true" >  
  14.   
  15.          
  16.     </android.support.v4.view.ViewPager></strong>  
  17.   
  18.     <FrameLayout  
  19.         android:layout_width="match_parent"  
  20.         android:layout_height="match_parent"  
  21.         android:layout_gravity="left"  
  22.         android:background="@drawable/bg_tab" />  
  23.   
  24. </android.support.v4.widget.DrawerLayout>  

 

2.Fragment

  1. package com.itheima.googleplay.fragment;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v4.app.Fragment;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.TextView;  
  9.   
  10. public class HomeFragment extends Fragment {  
  11.       
  12.     @Override  
  13.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  14.             Bundle savedInstanceState) {  
  15.         TextView tView = new TextView(getActivity());  
  16.         tView.setText("我是home");  
  17.         return tView;  
  18.     }  
  19. }  


3.互相监听

 ActionBar 监听  viewpager

 viewpager监听Actionbar


1.初始化viewpager

        mViewPager = (ViewPager) findViewById(R.id.vp);

2.给viewpager设置Adpater

     mViewPager.setAdapter(new MyAdpater(getSupportFragmentManager()));//这里要注意版本问题不然容易报错

    

  1. /** 
  2.  * viewpager adpater 
  3.  */  
  4. class MyAdpater extends FragmentStatePagerAdapter {  
  5.   
  6.     public MyAdpater(FragmentManager fm) {  
  7.         super(fm);  
  8.     }  
  9.   
  10.     // 每个条目返回的fragment  
  11.     @Override  
  12.     public Fragment getItem(int arg0) {  
  13.         switch (arg0) {  
  14.         case 0:  
  15.             return new HomeFragment();  
  16.   
  17.         default:  
  18.             return new AppFragment();  
  19.         }  
  20.     }  
  21.   
  22.     // 一共几个条目  
  23.     @Override  
  24.     public int getCount() {  
  25.         return 4;  
  26.     }  
  27.   
  28. }  


4.viewpager设置监听

  1. mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {  
  2.   
  3.     @Override  
  4.     public void onPageSelected(int position) {  
  5.         getActionBar().setSelectedNavigationItem(position);  
  6.     }  
  7. });  


5.actionbar监听

  1.              
  2.           伪代码  
  3.             bar.addTab(bar.newTab().setText("标签1")  
  4.                 .setTabListener(new MyTabListenter()));  
  5.   
  6.            private class MyTabListenter implements TabListener {  
  7.   
  8.         @Override  
  9.         public void onTabSelected(Tab tab, FragmentTransaction ft) {  
  10.             mViewPager.setCurrentItem(tab.getPosition()); // 监听tab选择哪个按钮位置  
  11.                                       // 然后来控制viewpager  
  12.         }  
  13.   
  14.         @Override  
  15.         public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
  16.   
  17.         }  
  18.   
  19.         @Override  
  20.         public void onTabReselected(Tab tab, FragmentTransaction ft) {  
  21.   
  22.         }  
  23.   
  24.     }  

//整体代码

    1. package com.itheima.googleplay;  
    2.   
    3. import com.itheima.googleplay.fragment.AppFragment;  
    4. import com.itheima.googleplay.fragment.HomeFragment;  
    5.   
    6. import android.os.Bundle;  
    7. import android.app.ActionBar;  
    8. import android.app.ActionBar.TabListener;  
    9. import android.app.FragmentTransaction;  
    10. import android.app.ActionBar.Tab;  
    11. import android.app.Activity;  
    12. import android.content.Intent;  
    13. import android.support.v4.app.ActionBarDrawerToggle;  
    14. import android.support.v4.app.Fragment;  
    15. import android.support.v4.app.FragmentActivity;  
    16. import android.support.v4.app.FragmentManager;  
    17. import android.support.v4.app.FragmentStatePagerAdapter;  
    18. import android.support.v4.view.ViewPager;  
    19. import android.support.v4.view.ViewPager.OnPageChangeListener;  
    20. import android.support.v4.widget.DrawerLayout;  
    21. import android.support.v4.widget.DrawerLayout.DrawerListener;  
    22. import android.support.v7.widget.SearchView;  
    23. import android.support.v7.widget.SearchView.OnQueryTextListener;  
    24. import android.util.Log;  
    25. import android.view.Menu;  
    26. import android.view.MenuItem;  
    27. import android.view.View;  
    28. import android.widget.Toast;  
    29.   
    30. public class MainActivity extends FragmentActivity {  
    31.   
    32.     private DrawerLayout drawerLayout;  
    33.     ActionBarDrawerToggle actionBarDrawerToggle;  
    34.     private ViewPager mViewPager;  
    35.   
    36.     @Override  
    37.     protected void onCreate(Bundle savedInstanceState) {  
    38.         super.onCreate(savedInstanceState);  
    39.         setContentView(R.layout.activity_main);  
    40.         drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);  
    41.         mViewPager = (ViewPager) findViewById(R.id.vp);  
    42.   
    43.         // ====================  
    44.         mViewPager.setAdapter(new MyAdpater(getSupportFragmentManager()));  
    45.   
    46.         // =====================  
    47.         ActionBar bar = getActionBar();  
    48.         // bar.setHomeButtonEnabled(true);  
    49.         bar.setDisplayHomeAsUpEnabled(true);// 设置home显示“三横”图标  
    50.   
    51.         // 添加tab  
    52.         bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
    53.         // 添加标签  
    54.         bar.addTab(bar.newTab().setText("标签1")  
    55.                 .setTabListener(new MyTabListenter()));  
    56.         bar.addTab(bar.newTab().setText("标签2")  
    57.                 .setTabListener(new MyTabListenter()));  
    58.         bar.addTab(bar.newTab().setText("标签3")  
    59.                 .setTabListener(new MyTabListenter()));  
    60.         bar.addTab(bar.newTab().setText("标签4")  
    61.                 .setTabListener(new MyTabListenter()));  
    62.   
    63.         // =================================================================  
    64.         // 参数1:当前的actionbar 参数2:哪个侧滑需要控制 参数3:按钮图标来控制侧滑  
    65.         // 参数4,5:打开关闭抽屉描述  
    66.         actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,  
    67.                 R.drawable.ic_drawer_am, R.string.drawer_open,  
    68.                 R.string.drawer_close);  
    69.         // //设置drawer的开关监听  
    70.         drawerLayout.setDrawerListener(new DrawerListener() {  
    71.   
    72.             @Override  
    73.             public void onDrawerStateChanged(int arg0) {  
    74.   
    75.             }  
    76.   
    77.             @Override  
    78.             public void onDrawerSlide(View arg0, float arg1) {  
    79.   
    80.             }  
    81.   
    82.             @Override  
    83.             public void onDrawerOpened(View arg0) {  
    84.   
    85.             }  
    86.   
    87.             @Override  
    88.             public void onDrawerClosed(View arg0) {  
    89.   
    90.             }  
    91.         });  
    92.   
    93.         // 将actionbar与DrawerLayout同步关联  
    94.         actionBarDrawerToggle.syncState();  
    95.   
    96.         // ===================viewpager监听============================  
    97.         mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {  
    98.   
    99.             @Override  
    100.             public void onPageSelected(int position) {  
    101.                 getActionBar().setSelectedNavigationItem(position);  
    102.             }  
    103.         });  
    104.   
    105.         // ===============================================  
    106.   
    107.     }  
    108.   
    109.     private class MyTabListenter implements TabListener {  
    110.   
    111.         @Override  
    112.         public void onTabSelected(Tab tab, FragmentTransaction ft) {  
    113.             mViewPager.setCurrentItem(tab.getPosition()); // 监听tab选择哪个按钮位置  
    114.                                                             // 然后来控制viewpager  
    115.         }  
    116.   
    117.         @Override  
    118.         public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
    119.   
    120.         }  
    121.   
    122.         @Override  
    123.         public void onTabReselected(Tab tab, FragmentTransaction ft) {  
    124.   
    125.         }  
    126.   
    127.     }  
    128.   
    129.     /** 
    130.      * 初始化menu 
    131.      */  
    132.     @Override  
    133.     public boolean onCreateOptionsMenu(Menu menu) {  
    134.         getMenuInflater().inflate(R.menu.main, menu);  
    135.   
    136.         // 获取searchview  
    137.         SearchView search = (SearchView) menu.findItem(R.id.action_search)  
    138.                 .getActionView();  
    139.         // 设置监听  
    140.         search.setOnQueryTextListener(new OnQueryTextListener() {  
    141.   
    142.             // 搜索文本提交的时候  
    143.             @Override  
    144.             public boolean onQueryTextSubmit(String searchText) {  
    145.                 // 输入内容的searchText  
    146.                 Toast.makeText(getApplicationContext(), searchText, 0).show();  
    147.                 return true;  
    148.             }  
    149.   
    150.             // 搜索文本发生变化的时候  
    151.             @Override  
    152.             public boolean onQueryTextChange(String searchText) {  
    153.                 Toast.makeText(getApplicationContext(), searchText, 0).show();  
    154.                 return false;  
    155.             }  
    156.         });  
    157.   
    158.         return true;  
    159.     }  
    160.   
    161.     // 处理搜索点击事件  
    162.     @Override  
    163.     public boolean onOptionsItemSelected(MenuItem item) {  
    164.         if (item.getItemId() == R.id.action_search) {  
    165.             Toast.makeText(this, "搜索", 0).show();  
    166.         }  
    167.   
    168.         return actionBarDrawerToggle.onOptionsItemSelected(item)  
    169.                 || super.onOptionsItemSelected(item);  
    170.     }  
    171.   
    172.     // 跳转 MainActivity - DetailActivity  
    173.     public void click(View view) {  
    174.         startActivity(new Intent(getApplicationContext(), DetailActivity.class));  
    175.     }  
    176.   
    177.     /** 
    178.      * viewpager adpater 
    179.      */  
    180.     class MyAdpater extends FragmentStatePagerAdapter {  
    181.   
    182.         public MyAdpater(FragmentManager fm) {  
    183.             super(fm);  
    184.         }  
    185.   
    186.         // 每个条目返回的fragment  
    187.         @Override  
    188.         public Fragment getItem(int arg0) {  
    189.             switch (arg0) {  
    190.             case 0:  
    191.                 return new HomeFragment();  
    192.   
    193.             default:  
    194.                 return new AppFragment();  
    195.             }  
    196.         }  
    197.   
    198.         // 一共几个条目  
    199.         @Override  
    200.         public int getCount() {  
    201.             return 4;  
    202.         }  
    203.   
    204.     }  
    205.   
posted @ 2016-11-05 17:07  天涯海角路  阅读(96)  评论(0)    收藏  举报