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) {
}
}
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 等相关认证资格提供积累专业技能的基础环境。
大数据工程师进阶 技术图谱 从开源大数据技术(选学),到云上大数据快速应用(更便捷、更强大)
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 等相关认证资格提供积累专业技能的基础环境。
大数据工程师进阶 技术图谱 从开源大数据技术(选学),到云上大数据快速应用(更便捷、更强大)
相关文章
- Cocos2D结合CoreGraphics实现RPG人物中空黑洞吸入效果
- Qt-Qt实现高斯模糊效果
- 用Easing函数实现碰撞效果
- JS实现——贪吃蛇
- Java实现 LeetCode 382 链表随机节点
- gradeview可拖动效果实现
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- jQuery实现ie浏览器兼容placeholder效果
- BaseServlet优化Servlet,实现类似struts2的一些简单效果
- 实现推拉效果显示图片
- 世纪末的星期python实现
- 用vue实现一个仿简书的轮播图效果
- 了解 Restful ABAP Programming 模型系列之二:Action 和 Validation 的实现
- [转]用 jQuery 实现页面滚动(Scroll)效果的完美方法
- 用纯CSS实现3D立方体效果
- Futter基础第10篇: 实现替换路由、返回到根路由
- 基于最小二乘法和SVM从天气预报中预测太阳能发电量(Matlab代码实现)
- 【状态估计】观测信号(包括异常值)的状态估计方法(Matlab代码实现)
- Android ScrollView滚动实现大众点评、网易云音乐评论悬停效果
- 042:vue+openlayers实现canvas遮罩效果(代码示例)
- Android Studio快捷键设置之实现原eclipse中ctrl+m的全屏的效果
- HarmonyOS鸿蒙学习笔记(15)Swiper实现抖音切换视频播放效果
- WPF中实现动画的几种效果(最基础方式)
- 如何实现 kitten编程猫 里虚拟手柄效果
- 使用vue简单实现tab选项卡切换效果分享
- 使用jQuery实现点击页面时,出现心型特效,几秒后消失的效果案例
- Vue3实现滚动加载动画效果
- 类似QQ贴边掩藏功能的实现(二)