ViewPager+Fragment滑动界面,并做延迟加载
来源:互联网 发布:php培训课程安排 编辑:程序博客网 时间:2024/05/22 17:27
本代码有缺陷,如果回到桌面后,资源被系统回收后会报错。
新文章: http://blog.csdn.net/q445697127/article/details/18352033
Activity继承FragmentActivity
新文章: http://blog.csdn.net/q445697127/article/details/18352033
Activity继承FragmentActivity
package com.bitcare.activity;import java.util.ArrayList;import java.util.List;import android.graphics.Matrix;import android.support.v4.app.FragmentActivity;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.view.Display;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.TextView;import com.bitcare.adapter.FmtPagerAdapter;import com.bitcareV2.activity.R;import com.googlecode.androidannotations.annotations.AfterViews;import com.googlecode.androidannotations.annotations.Click;import com.googlecode.androidannotations.annotations.EActivity;import com.googlecode.androidannotations.annotations.NoTitle;import com.googlecode.androidannotations.annotations.ViewById;@EActivity(R.layout.activity_hospital)public class HospitalActivity extends FragmentActivity {@ViewByIdTextView tvTitle;@ViewByIdTextView tvProfiles, tvOffice, tvEvaluate;@ViewByIdImageButton ibLeft;@ViewByIdImageView ivBottomLine;@ViewByIdViewPager vpHospital;private List<BaseFragment> fragments;private int currIndex = 0;private int bottomLineWidth;private int offset = 0;@AfterViewsvoid initView() {tvTitle.setText("南昌大学第二附属医院");ibLeft.setVisibility(View.VISIBLE);InitWidth();InitViewPager();}private void InitWidth() {int screenWidth;// 屏幕宽度 如果是使用图片可以使用另一篇文章的宽度计算方法WindowManager windowManager = getWindowManager();Display display = windowManager.getDefaultDisplay();screenWidth = display.getWidth();bottomLineWidth = screenWidth / 3;LayoutParams layoutParams = ivBottomLine.getLayoutParams();layoutParams.width = bottomLineWidth;ivBottomLine.setLayoutParams(layoutParams);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;// 获取分辨率宽度offset = (screenW / 3 - bottomLineWidth) / 2;// 计算偏移量Matrix matrix = new Matrix();matrix.postTranslate(offset, 0);ivBottomLine.setImageMatrix(matrix);// 设置动画初始位置}private HospitalProfilesFragment_ profilesFragment_;private HospitalOfficeFragment_ officeFragment_;private HospitalEvaluateFragment_ evaluateFragment_;private void InitViewPager() {fragments = new ArrayList<BaseFragment>();profilesFragment_ = new HospitalProfilesFragment_();officeFragment_ = new HospitalOfficeFragment_();evaluateFragment_ = new HospitalEvaluateFragment_();fragments.add(profilesFragment_);fragments.add(officeFragment_);fragments.add(evaluateFragment_);vpHospital.setAdapter(new FmtPagerAdapter(getSupportFragmentManager(), fragments));vpHospital.setOnPageChangeListener(changeListener);tvProfiles.setTextColor(getResources().getColor(R.color.black_txt));}@Clickvoid ibLeft() {finish();}@Clickvoid tvProfiles() {vpHospital.setCurrentItem(0);}@Clickvoid tvOffice() {vpHospital.setCurrentItem(1);}@Clickvoid tvEvaluate() {vpHospital.setCurrentItem(2);}OnPageChangeListener changeListener = new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {int one = offset * 2 + bottomLineWidth;// 页卡1 -> 页卡2 偏移量Animation animation = new TranslateAnimation(one * currIndex, one * arg0, 0, 0);// 显然这个比较简洁,只有一行代码。currIndex = arg0;animation.setFillAfter(true);animation.setDuration(100);ivBottomLine.startAnimation(animation);tvProfiles.setTextColor(getResources().getColor(R.color.gray_txt));tvOffice.setTextColor(getResources().getColor(R.color.gray_txt));tvEvaluate.setTextColor(getResources().getColor(R.color.gray_txt));switch (arg0) {case 0:tvProfiles.setTextColor(getResources().getColor(R.color.black_txt));break;case 1:tvOffice.setTextColor(getResources().getColor(R.color.black_txt));break;case 2:tvEvaluate.setTextColor(getResources().getColor(R.color.black_txt));break;}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}};}为了做延迟加载数据需要自定义一个BaseFragment类
package com.bitcare.activity;import android.support.v4.app.Fragment;public abstract class BaseFragment extends Fragment {/** * 显示页面数据 */public abstract void show();}在写一个FragmentPagerAdapter类
package com.bitcare.adapter;import java.util.List;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.view.ViewGroup;import com.bitcare.activity.BaseFragment;public class FmtPagerAdapter extends FragmentPagerAdapter {private List<BaseFragment> fragmentsList; private FragmentManager fm;public FmtPagerAdapter(FragmentManager fm) {super(fm); this.fm = fm;}public FmtPagerAdapter(FragmentManager fm, List<BaseFragment> fragments) {super(fm);this.fragmentsList = fragments; this.fm = fm;}@Overridepublic int getCount() {return fragmentsList.size();}@Overridepublic Fragment getItem(int arg0) {return fragmentsList.get(arg0);} @Overridepublic void setPrimaryItem(ViewGroup container, int position, Object object) {//知道当前是第几页,但是每次滑动后可能会调用多次 //这个方法是重点super.setPrimaryItem(container, position, object);fragmentsList.get(position).show();}@Overridepublic int getItemPosition(Object object) {//加此方法可以使viewpager可以进行刷新return PagerAdapter.POSITION_NONE;} //使用此方法刷新数据 每次都要NEW一个新的List,不然没有刷新效果 转至http://blog.sina.com.cn/s/blog_783ede03010173b4.htmlpublic void setFragments(ArrayList<Fragment> fragments) {if(this.fragments != null){FragmentTransaction ft = fm.beginTransaction();for(Fragment f:this.fragments){ft.remove(f);}ft.commit();ft=null;fm.executePendingTransactions();}this.fragments = fragments;notifyDataSetChanged();}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// 注释自带的销毁方法防止页面被销毁 //这个方法是重点 // super.destroyItem(container, position, object);}}给每个单独的页面继承BaseFragment即可,在show方法中实现调用数据的方法,但是注意的是每次滑动会多次调用show方法
- ViewPager+Fragment滑动界面,并做延迟加载
- ViewPager+Fragment滑动界面,并做延迟加载【新版】
- ViewPager+Fragment滑动界面,并做延迟加载【新版】
- ViewPager+Fragment滑动界面,并做延迟加载【终极解决】
- ViewPager+Fragment延迟加载
- ViewPager+Fragment 延迟加载
- ViewPager+Fragment延迟加载
- ViewPager+Fragment延迟加载
- fragment viewpager界面滑动
- ViewPager+Fragment实现界面滑动
- ViewPager+Fragment滑动切换界面
- ViewPager+Fragment取消预加载(延迟加载)
- android viewpager中的fragment 延迟加载数据
- Fragment延迟加载技术(解决Viewpager预加载fragment)
- 滑动(仿微信主界面)Fragment、ViewPager
- ViewPager+Fragment打造滑动切换界面
- TabLayout+ViewPager+Fragment完成滑动界面
- RadioGroup + ViewPager + Fragment 实现滑动展示界面
- AutoFac使用方法总结:Part I
- Asp.net MVC3 自定义HtmlHelper控件
- 实现 ftp 文件/文件夹的上传下载以及删除
- autorelease探究
- PLSQL Developer图形化窗口创建 oracle 数据库全过程
- ViewPager+Fragment滑动界面,并做延迟加载
- 文档示例
- 改变 DrawText()字体
- 产品经理必读的九步法
- QPropertyAnimation 的用法
- Oracle EBS 11i 职责不见了的解决方法
- Android音频输出切换
- 三种经典“返回顶部”效果的代码
- IIS7 “未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序”