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;@Overridepublic 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@Overridepublic 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() {@Overridepublic 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();//所有的控件 都有爹 爹一般情况下 就是ViewGoupif(parent instanceof ViewGroup){ViewGroup group=(ViewGroup) parent;group.removeView(v);}}}