抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)
2017-09-09 15:57
483 查看
抽取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;// 位置的状态
}
网络加载和显示界面放在BaseFrament
public abstract class BaseFragment extends
aebd
Fragment {
}
具体页面处理
public class HomeFragment extends BaseFragment {
}
主入口MainActivity
// 初始化 indicater
PagerTabStrip tabStrip = (PagerTabStrip) findViewById(R.id.pager_title_strip);
tabStrip.setTabIndicatorColorResource(R.color.indicatorcolor);
// 初始化 viewpager
适配MyPagerAdapter
class MyPagerAdapter extends FragmentStatePagerAdapter {
界面处理放在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
aebd
Fragment {
private LoadingPage loadingPage; @Override public void onDestroyView() { super.onDestroyView(); // 一个view 不能 有多个父view // frameLayout从 父view中移除 ViewUtils.removeFromParent(loadingPage); } @Override public 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 {
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); show(); } /** * 2. 创建成功界面 只有网络加载成功后才去创建成功界面 */ @Override protected View createSuccessView() { return xxx; } /** * 1. 加载网络数据 */ @Override protected 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]; } }
相关文章推荐
- tcp proxy,可以在request_handler或者response_handler进行特殊修改,渗透测试或者协议故障测试的时候可以使用。要想支持ssl,只需connect处进行修改调整
- 在应用ERP PATCH的时候,可能出现一些错误,可以通过如下log文件查看错误
- java读取图像的rpg以及灰度值,可以对rgb进行修改后输出新图像
- xUtils中的dbUtils中,在应用升级的时候修改表结构
- Android应用中,退出activity时对一些资源以及状态的操作保存,可以在生命周期的哪个函数中进行?
- 修改用户信息的时候,使用Servlet对新的数据和数据库的数据进行对比,修改成功实现页面的弹窗和页面的跳转
- 未开启自定义菜单 由于开发者通过接口修改了菜单配置,当前菜单配置已失效并停用。你可以前往开发者中心进行停用。
- 点击修改,可以修改文本框,进行取消或保存
- SQL根据字符串类型字段进行排序,可以在取值的时候处理
- Java VisualVM 插件地址,安装Visual VM插件,修改下载插件地址使插件可以直接在JVisualVM中进行下载
- Mater-Details数据查询修改时,在用DetailsView进行新建,编辑(添加DropDownList控件)应用时需要注意的几点问题
- 这是一个波形发生器 帮忙修改一下 可以进行调幅调频
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例
- iOS9 应用之间跳转可以点击左上角进行跳转
- Javassist简单应用 - 不用学习JVM知识也可以修改class文件
- 怎么将两个表中树,拼成一个树(并创造一个顶级节点)还可以正常保存,下次修改的时候值还要正常的带出来?
- 在做app应用的时候,需要将数据提交到服务器去存储,那么方法可以参考如下
- String是final类,常规情况下其值是不可变的。但是可以通过非常规方法——反射进行修改
- 应用内核补丁而不用重启 - 梦想可以在某些时候成真了吗?
- 什么软件可以将难以编辑的PDF文件进行修改