zl程序教程

您现在的位置是:首页 >  其它

当前栏目

FragmentPagerAdapter+ViewPager实现Tab切换效果

实现 效果 切换 tab Viewpager
2023-09-14 08:57:56 时间
import android.support.v13.app.FragmentPagerAdapter;   import android.support.v4.view.ViewPager;   import android.view.ActionMode;   import java.util.ArrayList;   public class MainActivity extends Activity {       private static final String INSTANCESTATE_TAB = "tab";       ViewPager mViewPager;       TabsAdapter mTabsAdapter;       ActionMode mActionMode;       @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.fragment_pager);           mViewPager = (ViewPager) findViewById(R.id.pager);           final ActionBar bar = getActionBar();           bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);           bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME);           mTabsAdapter = new TabsAdapter(this, mViewPager);           mTabsAdapter.addTab(bar.newTab().setText(R.string.tab_sd),                   Fragment1.class, null);           mTabsAdapter.addTab(bar.newTab().setText(R.string.tab_remote),                   Fragment2.class, null);           if (savedInstanceState != null) {               bar.setSelectedNavigationItem(savedInstanceState.getInt(INSTANCESTATE_TAB, 0));           }       }       @Override       protected void onSaveInstanceState(Bundle outState) {           super.onSaveInstanceState(outState);           outState.putInt(INSTANCESTATE_TAB, getActionBar().getSelectedNavigationIndex());       }       public void setActionMode(ActionMode actionMode) {           mActionMode = actionMode;       }       public ActionMode getActionMode() {           return mActionMode;       }       public static class TabsAdapter extends FragmentPagerAdapter               implements ActionBar.TabListener, ViewPager.OnPageChangeListener {           private final Context mContext;           private final ActionBar mActionBar;           private final ViewPager mViewPager;           private final ArrayList TabInfo  mTabs = new ArrayList TabInfo            static final class TabInfo {               private final Class ?  clss;               private final Bundle args;               private Fragment fragment;               TabInfo(Class ?  _class, Bundle _args) {                   clss = _class;                   args = _args;               }           }           public TabsAdapter(Activity activity, ViewPager pager) {               super(activity.getFragmentManager());               mContext = activity;               mActionBar = activity.getActionBar();               mViewPager = pager;               mViewPager.setAdapter(this);               mViewPager.setOnPageChangeListener(this);           }           public void addTab(ActionBar.Tab tab, Class ?  clss, Bundle args) {               TabInfo info = new TabInfo(clss, args);               tab.setTag(info);               tab.setTabListener(this);               mTabs.add(info);               mActionBar.addTab(tab);               notifyDataSetChanged();           }           @Override           public int getCount() {               return mTabs.size();           }           @Override           public Fragment getItem(int position) {               TabInfo info = mTabs.get(position);               if (info.fragment == null) {                   info.fragment = Fragment.instantiate(mContext, info.clss.getName(), info.args);               }               return info.fragment;           }                      @Override           public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {           }           @Override           public void onPageSelected(int position) {               mActionBar.setSelectedNavigationItem(position);           }           @Override           public void onPageScrollStateChanged(int state) {           }           @Override           public void onTabSelected(Tab tab, FragmentTransaction ft) {               Object tag = tab.getTag();               for (int i=0; i mTabs.size(); i++) {                   if (mTabs.get(i) == tag) {                       mViewPager.setCurrentItem(i);                   }               }               if(!tab.getText().equals(mContext.getString(R.string.tab_sd))) {                   ActionMode actionMode = ((MainActivity) mContext).getActionMode();                   if (actionMode != null) {                       actionMode.finish();                   }               }           }           @Override           public void onTabUnselected(Tab tab, FragmentTransaction ft) {           }           @Override           public void onTabReselected(Tab tab, FragmentTransaction ft) {           }       }  


2.fragment_pager.xml布局文件   里面就一个ViewPager控件   大家记得导入v4包


android.support.v4.view.ViewPager       xmlns:android="http://schemas.android.com/apk/res/android"       android:id="@+id/pager"       android:layout_width="match_parent"       android:layout_height="match_parent"    /android.support.v4.view.ViewPager   
    @Override       public View onCreateView(LayoutInflater inflater, ViewGroup container,               Bundle savedInstanceState) {   //      return View.inflate(getActivity(), R.layout.fragment1, null);           return inflater.inflate(R.layout.fragment1,container, false);       }  
RelativeLayout 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"         TextView           android:layout_width="wrap_content"           android:layout_height="wrap_content"           android:text="这是第一个页面" /    /RelativeLayout   
什么是SnapHelper SnapHelper是Google 在 Android 24.2.0 的support 包中添加的对RecyclerView的拓展,结合RecyclerView使用,能很方便的做出一些炫酷的效果。
ViewPager配合不同的PagerAdapter,对应Fragment的生命周期有着不同的表现,了解这个生命周期机制对于开发者选择合适的PagerAdapter实现不同的效果,有着很大的帮助。
ansen_666 有三年android开发经验,开发过加密.短视频.直播app,一直在互联网公司工作,目前就职于上海翼成科技,担任android开发组长。
Kubernetes 技术图谱 Kubernetes 技术图谱由 Linux Foundation 开源软件大学、马哥教育、阿里云云原生团队、阿里云开发者学堂专家联合出品,通过技术入门、Kubernetes 应知应会、Kubernetes 实践能力训练三个维度的设计,帮助云原生人才建包括理论、实践、体验的基础技能体系,提供 CKA、CKAD、ACA、ACP 等相关认证资格提供积累专业技能的基础环境。
大数据工程师进阶 技术图谱 从开源大数据技术(选学),到云上大数据快速应用(更便捷、更强大)