3.加载界面

1.  四种界面: 加载中, 加载错误,加载为空 ,加载成功

2.  根据不同的状态去切换界面

HomeFragment

public class HomeFragment extends Fragment {
 public static final int STATE_UNKOWN = 0;
 public static final int STATE_LOADING = 1;
 public static final int STATE_ERROR = 2;
 public static final int STATE_EMPTY = 3;
 public static final int STATE_SUCCESS = 4;
 public static int state = STATE_UNKOWN;
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
 Bundle savedInstanceState) {
 if (frameLayout == null) { 
// 之前的frameLayout 已经记录了一个爹了 爹是之前的ViewPager,先干掉之前的爹
			frameLayout = new FrameLayout(getActivity());
			init(); // 在FrameLayout中 添加4种不同的界面
 } else {
 ViewUtils.removeParent(frameLayout);// 移除frameLayout之前的爹
 }
		show();// 根据服务器的数据 切换状态
 return frameLayout; // 拿到当前viewPager 添加这个framelayout
 }
 private View loadingView;// 加载中的界面
 private View errorView;// 错误界面
 private View emptyView;// 空界面
 private View successView;// 加载成功的界面
 private FrameLayout frameLayout;
 // 在FrameLayout中 添加几种不同的界面
 private void init() {
		loadingView = createLoadingView(); // 创建了加载中的界面
 if (loadingView != null) {
			frameLayout.addView(loadingView, new FrameLayout.LayoutParams(
 LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
 }
		errorView = createErrorView(); // 加载错误界面
 if (errorView != null) {
			frameLayout.addView(errorView, new FrameLayout.LayoutParams(
 LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
 }
		emptyView = createEmptyView(); // 加载空的界面
 if (emptyView != null) {
			frameLayout.addView(emptyView, new FrameLayout.LayoutParams(
 LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
 }
		showPage();// 根据不同的状态显示不同的界面
 }
 // 根据不同的状态显示不同的界面
 private void showPage() {
 if (loadingView != null) {
			loadingView.setVisibility(state == STATE_UNKOWN
 || state == STATE_LOADING ? View.VISIBLE : View.INVISIBLE);
 }
 if (errorView != null) {
			errorView.setVisibility(state == STATE_ERROR ? View.VISIBLE
 : View.INVISIBLE);
 }
 if (emptyView != null) {
			emptyView.setVisibility(state == STATE_EMPTY ? View.VISIBLE
 : View.INVISIBLE);
 }
 if (state == STATE_SUCCESS) {
			successView = createSuccessView();
 if (successView != null) {
				frameLayout.addView(successView, new FrameLayout.LayoutParams(
 LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
				successView.setVisibility(View.VISIBLE);
 }
 }
 }
 private View createSuccessView() {
 TextView tv = new TextView(getActivity());
		tv.setText("加载成功了....");
		tv.setTextSize(30);
 return tv;
 }
//枚举,相当于内部类
 public enum LoadResult {
		error(2), empty(3), success(4);
 int value;
 LoadResult(int value) {
 this.value = value;
 }
 public int getValue() {
 return value;
 }
 }
 // 根据服务器的数据 切换状态
 private void show() {
 if (state == STATE_ERROR || state == STATE_EMPTY) {
			state = STATE_LOADING;
 }
 // 请求服务器 获取服务器上数据 进行判断,模拟服务器
 // 请求服务器 返回一个结果
 new Thread() {
 public void run() {
 SystemClock.sleep(2000);//这个方法也能睡
 final LoadResult result = load();
 if (getActivity() != null) {
					getActivity().runOnUiThread(new Runnable() {//主线程刷新ui
 @Override
 public void run() {
 if (result != null) {
								state = result.getValue();
								showPage(); // 状态改变了,重新判断当前应该显示哪个界面
 }
 }
 });
 }
 };
 }.start();
		showPage();
 }
 private LoadResult load() {
 return LoadResult.success;
 }
 /* 创建了空的界面 */
 private View createEmptyView() {
 View view = View.inflate(getActivity(), R.layout.loadpage_empty, null);
 return view;
 }
 /* 创建了错误界面 */
 private View createErrorView() {
 View view = View.inflate(getActivity(), R.layout.loadpage_error, null);
 Button page_bt = (Button) view.findViewById(R.id.page_bt);
		page_bt.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
				show();
 }
 });
 return view;
 }
 /* 创建加载中的界面 */
 private View createLoadingView() {
 View view = View
 .inflate(getActivity(), R.layout.loadpage_loading, null);
 return view;
 }
}

ViewUtils

public class ViewUtils {
 public static void removeParent(View v){
 //  先找到爹 在通过爹去移除孩子
 ViewParent parent = v.getParent();
 //所有的控件 都有爹  爹一般情况下 就是ViewGoup
 if(parent instanceof ViewGroup){
 ViewGroup group=(ViewGroup) parent;
			group.removeView(v);
 }
 }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding+

FloatWindowUtils 实现及事件冲突解决详解

悬浮窗即可以显示在宿主应用之外的 View 视图,理论上任何 View 都能以悬浮窗形式展示在宿主应用之外甚至锁屏界面,一般在工具类应用中使用的比较多,通过悬浮...

1642
来自专栏向治洪

slidingmenu开源效果

本文将更进一步, 在很多实际的应用场景中我们需要一个更复杂的场景,比如说需要在一个菜单选项中集成多个tab来集中显示信息。这个时候 Viewpager就派上用场...

2575
来自专栏Android开发指南

10.下拉刷新、加载更多、标记已读、轮播条、缓存

38410
来自专栏向治洪

关于ListView中包含EditText数据复用引起异常的解决方案

概述 前几天测试提了一个bug,在ListView中添加留言信息,导致错乱的问题。实际上就是ListView需要添加一个EditText,复用导致错乱的问题,这...

2239
来自专栏向治洪

Android ViewDragHelper及移动处理总结

概述 2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用。我们知道在...

2948
来自专栏向治洪

仿今日头条滑动评论效果

开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能DEMO,所以就放出来这么一个DEMO。 原本觉得是最后完成后发网站客户端的,可是这样...

2255
来自专栏向治洪

android 仿qq手写板涂鸦

以前博客的链接:点击打开链接 附上关键代码: MainView.java package com.tszy.views;   import java.io....

2246
来自专栏向治洪

ttf设置文字字体

MainActivity如下: package cn.testfont;   import android.os.Bundle;   import andr...

2049
来自专栏学海无涯

Android开发之GridView实现弹出式选择器

前段时间,写了一个小项目,里面有个界面如下图所示,之前的版本是用Spinner来做,觉得不够拉轰,所以采用GridView做了一个实现,效果还不错,Mark一下...

2965
来自专栏猿份到

仿网易栏目添加功能

在qq群里面发现一个小伙伴有需要做类似于网易新闻客户端栏目拖拽添加的这种效果,特意做了类似效果,效果图如下(文章结尾有源码链接): ? ? ? ? 实现了点击...

3598

扫码关注云+社区