抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)
来源:互联网 发布:linux搜狗输入法设置 编辑:程序博客网 时间:2024/05/16 12:57
抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)
界面处理放在LoadingPage里面
public abstract class LoadingPage extends FrameLayout {
private View loadingView;// 正在加载中的view对象
private View errorView;// 加载失败的view对象
private View emptyView;// 加载为空的view对象
private View successView;// 加载成功的view对象
protected static final int STATUS_LOADING = 0;// 正在加载的状态
protected static final int STATUS_UNKNOWN = 4;// 位置的状态
// 服务器返回的三种状态public final static int STATUS_ERROR = 1;// 加载错误的状态public final static int STATUS_EMPTY = 2;// 加载为空的状态public final static int STATUS_SUCCESS = 3;// 加载成功的状态private int state = STATUS_LOADING;// 进来默认正在加载public LoadingPage(Context context) { super(context); init();}public LoadingPage(Context context, AttributeSet attrs) { super(context, attrs); init();}public LoadingPage(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init();}/** * 将几种不同的 界面添加到FrameLayout中 */protected void init() { if (loadingView == null) { loadingView = createLoadingView(); // 创建加载中的界面 this.addView(loadingView, new LayoutParams( LayoutParams.MATCH_PARENT, -1)); } if (errorView == null) { errorView = createErrorView(); // 创建加载失败的view对象 this.addView(errorView, new LayoutParams( LayoutParams.MATCH_PARENT, -1)); } if (emptyView == null) { emptyView = createEmptyView();// 创建加载为空的界面 this.addView(emptyView, new LayoutParams( LayoutParams.MATCH_PARENT, -1)); }}/** * 创建加载中的界面 * * @return */private View createLoadingView() { // xml --- view return UIUtils.inflate(R.layout.page_loading);}/** * 创建加载失败的界面 * * @return */private View createErrorView() { View view = UIUtils.inflate(R.layout.page_error); view.findViewById(R.id.page_bt).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // 点击后重新请求网络 show(); } }); return view;}/** * 创建加载为空的界面 * * @return */private View createEmptyView() { return UIUtils.inflate(R.layout.page_empty);}/** * 根据服务器返回的结果 切换界面 */public void show() { // 上一个状态是错误状态 重新修改为正在加载 if (state == STATUS_ERROR) { state = STATUS_LOADING; } // 状态改变后重新显示界面 showPage(); ThreadUtils.runOnBackThread(new Runnable() { @Override public void run() { SystemClock.sleep(3000); state = load(); ThreadUtils.runOnUiThread(new Runnable() { @Override public void run() { showPage();// 根据不同的状态切换不同的界面 } }); } });}/** * / 根据不同的状态切换界面 */public void showPage() { // private View loadingView;// 正在加载中的view对象 // private View errorView;// 加载失败的view对象 // private View emptyView;// 加载为空的view对象 // private View successView;// 加载成功的view对象 // 在状态为 正在加载/未知 显示 if (loadingView != null) { loadingView.setVisibility(state == STATUS_LOADING || state == STATUS_UNKNOWN ? View.VISIBLE : View.INVISIBLE); } // 状态为 错误 显示错误界面 if (errorView != null) { errorView.setVisibility(state == STATUS_ERROR ? View.VISIBLE : View.INVISIBLE); } // 获取服务器数据 但是数据为空 显示为空界面 if (emptyView != null) { emptyView.setVisibility(state == STATUS_EMPTY ? View.VISIBLE : View.INVISIBLE); } if (state == STATUS_SUCCESS) { // 只有状态为success 的时候才去创建成功界面 if (successView == null) { successView = createSuccessView(); this.addView(successView, new LayoutParams(-1, -1)); }else { successView.setVisibility(View.VISIBLE); } }else{ if (successView != null) { successView.setVisibility(View.INVISIBLE); } }}/** * 加载网络数据 是子线程调用 * @return */public abstract int load() ;/** *当网络请求成功后 创建成功界面 * @return */public abstract View createSuccessView();
}
网络加载和显示界面放在BaseFrament
public abstract class BaseFragment extends Fragment {
private LoadingPage loadingPage;@Overridepublic void onDestroyView() { super.onDestroyView(); // 一个view 不能 有多个父view // frameLayout从 父view中移除 ViewUtils.removeFromParent(loadingPage);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (loadingPage == null) { // 创建帧布局 loadingPage = new LoadingPage(UIUtils.getContext()) { // 1.init // 将几种不同的界面添加到LoadingPage @Override public int load() { // LoadingPage 无法加载网络 数据 交给BaseFragment做 网络请求 return BaseFragment.this.load(); } @Override public View createSuccessView() { return BaseFragment.this.createSuccessView(); } }; } showPage();// 根据不同的状态切换界面 return loadingPage;}private void showPage() { loadingPage.showPage();}public void show() { loadingPage.show();}// // 服务器返回的三种状态// public final static int STATUS_ERROR = 1;// 加载错误的状态// public final static int STATUS_EMPTY = 2;// 加载为空的状态// public final static int STATUS_SUCCESS = 3;// 加载成功的状态/** 检测从服务器返回的 数据 */protected int checkDatas(List<? extends Object> datas) { if (datas == null) { return LoadingPage.STATUS_ERROR; } else { if (datas.size() == 0) { return LoadingPage.STATUS_EMPTY; } else { return LoadingPage.STATUS_SUCCESS; } }}/** * 创建加载成功界面 * * @return */protected abstract View createSuccessView();/** * 访问网络 ./访问服务器 返回对应的状态 protected final int STATUS_ERROR = 1;// 加载错误的状态 * protected final int STATUS_EMPTY = 2;// 加载为空的状态 protected final int * STATUS_SUCCESS = 3;// 加载成功的状态 * * @return */protected abstract int load();
}
具体页面处理
public class HomeFragment extends BaseFragment {
@Overridepublic void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); show();}/** * 2. 创建成功界面 只有网络加载成功后才去创建成功界面 */@Overrideprotected View createSuccessView() { return xxx;}/** * 1. 加载网络数据 */@Overrideprotected int load() { LoadingPage.STATUS_SUCCESS;}
}
主入口MainActivity
// 初始化 indicater
PagerTabStrip tabStrip = (PagerTabStrip) findViewById(R.id.pager_title_strip);
tabStrip.setTabIndicatorColorResource(R.color.indicatorcolor);
// 初始化 viewpager
mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); mViewPager .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); BaseFragment fragment = FragmentFactory.createFragment(position); fragment.show(); } });
适配MyPagerAdapter
class MyPagerAdapter extends FragmentStatePagerAdapter {
public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return FragmentFactory.createFragment(position); } @Override public int getCount() { return tabNames.length; } @Override public CharSequence getPageTitle(int position) { return tabNames[position]; }}
- 抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)
- Fragment 基类的常规抽取
- Fragment 基类的高级抽取,分析
- Fragment生命周期到项目开发使用Fragment的抽取
- Android-----Fragment抽取
- Activity和 Fragment抽取基类
- Activity和Fragment的五种交互方式(Activity可以改变Fragment的UI,Fragment也可以改变ActivityUI)
- 用统计方法进行信息抽取的几位研究人员
- 对RecycleView的adapter的抽取
- ViewPager和Fragment使用时候的适配器
- Fragment嵌套Fragment的时候内部的不要用getFragmentManager
- ViewPager 和Fragment 的一点点交互心得
- informatic对表的增量抽取机制
- 可以后退的Fragment
- 用正则表达式对网页进行有效内容抽取
- 用正则表达式对网页进行有效内容抽取
- ListView和GridView的adapter的抽取
- viewpager+fragment+tablayout适配器和fragment的一些应用
- Weblogic三种部署方式
- 又来继续写博客了,搬家wuit.top
- 《大型网站技术架构》读书笔记(二)——大型网站系统架构图
- Windows 版 SourceTree 免登录跳过初始设置的方法
- 输入一个链表,反转链表后,输出链表的所有元素。
- 抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)
- 带你走进SAP项目实施过程——立项(1)
- php环境之WampServer(wamp)集成环境的搭建
- CentOS环境下Docker安装详细步骤
- python多线程socket编程--多客户端接入
- 正则表达式
- LINUX中文件描述
- struts2之类型转换器的使用(明白原理,不用掌握)
- background-position 用法详细介绍