前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3.加载界面

3.加载界面

作者头像
六月的雨
发布2018-05-14 11:35:17
6600
发布2018-05-14 11:35:17
举报
文章被收录于专栏:Android开发指南Android开发指南

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

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

HomeFragment

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
 }
 }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档