android获取数据加载页面(loadingmanager)

来源:互联网 发布:北京大学网络投诉 编辑:程序博客网 时间:2024/06/15 01:34

Android获取数据加载页面

核心思路

  • 显示数据的页面与显示加载的页面在同一个RelativeLayout中
  • 动态实例化各个组件,添加FrameLayout进入RelativeLayout中
  • 三种情况对应三种xml,使用inflater获取组件实例
  • loading页面能够旋转依靠Animation类

可重用类LoadingManager

public class LoadingManager {    private Activity mActivity;    private LayoutInflater mInflater;    private View mView;    private ImageView mLoadingView;    private Animation mAnimation;    private RelativeLayout mListParent;    private FrameLayout mLoadingFrame;    private RelativeLayout mRlLoading;    private LinearLayout mLlNoData;    private LinearLayout mLlNoNetwork;    public LoadingManager(Activity activity, View view, int resId){        mActivity = activity;        mView = view;        mInflater = mActivity.getLayoutInflater();        mListParent = (RelativeLayout) mView.findViewById(resId);        initViews();        initAnimation();    }    public LoadingManager(Activity activity, int resId){        mActivity = activity;        mInflater = mActivity.getLayoutInflater();        mListParent = (RelativeLayout) mActivity.findViewById(resId);        initViews();        initAnimation();    }    private void initViews() {        mLoadingFrame = new FrameLayout(mActivity);        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);        mLoadingFrame.setLayoutParams(params);        // 初始化三种状态的layout        mRlLoading = (RelativeLayout) mInflater.inflate(R.layout.page_loading, null);        mLlNoData = (LinearLayout) mInflater.inflate(R.layout.page_no_data, null);        mLlNoNetwork = (LinearLayout) mInflater.inflate(R.layout.page_no_network, null);        // 在mRllLoading中过去ImageView        mLoadingView = (ImageView) mRlLoading.findViewById(R.id.iv_rotate);        // 初始化后隐藏        hideAll();        // 添加三种状态为frame的子view        mLoadingFrame.addView(mRlLoading);        mLoadingFrame.addView(mLlNoData);        mLoadingFrame.addView(mLlNoNetwork);        mListParent.addView(mLoadingFrame);    }    public void hideAll() {        mRlLoading.setVisibility(View.GONE);        mLlNoData.setVisibility(View.GONE);        mLlNoNetwork.setVisibility(View.GONE);        mLoadingFrame.setVisibility(View.GONE);    }    private void initAnimation() {        mAnimation = new RotateAnimation(0.0f, 360f,                Animation.RELATIVE_TO_SELF, 0.5f,                Animation.RELATIVE_TO_SELF, 0.5f);        mAnimation.setInterpolator(new LinearInterpolator());        mAnimation.setDuration(2000);        mAnimation.setRepeatMode(Animation.RESTART);// 重复        mAnimation.setRepeatCount(Animation.INFINITE);// 无限次    }    public void showLoading(){        hideAll();        mLoadingFrame.setVisibility(View.VISIBLE);        mRlLoading.setVisibility(View.VISIBLE);        mLoadingView.setAnimation(mAnimation);        mAnimation.startNow();    }    public void showNoData(){        hideAll();        mLoadingFrame.setVisibility(View.VISIBLE);        mLlNoData.setVisibility(View.VISIBLE);    }    public void showNoNetwork(){        hideAll();        mLoadingFrame.setVisibility(View.VISIBLE);        mLlNoNetwork.setVisibility(View.VISIBLE);    }    public boolean isHiding(){        return mLoadingFrame.getVisibility() == View.GONE;    }}

判断网络状态NetworkTools

public class NetworkTools {    public enum NetType {        NONE, WIFI, CELLULAR    }    public static boolean isNoNetwork(Context context) {        return NetType.NONE == getNetType(context);    }    public static boolean is2G3GNetwork(Context context) {        return NetType.CELLULAR == getNetType(context);    }    public static NetType getNetType(Context context) {        ConnectivityManager conManger = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        if (conManger == null) {            return NetType.NONE;        }        NetworkInfo networkInfo = conManger.getActiveNetworkInfo();        if (networkInfo == null || !networkInfo.isAvailable()) {            return NetType.NONE;        }        if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {            return NetType.WIFI;        }        return NetType.CELLULAR;    }}

实例代码

// 初始化LoadingMangermLoadingManager = new LoadingManager(mActivity, R.id.loading_layout);    // 判断是否有网络,没有网络就显示NoNetwork状态界面    if(NetworkTools.isNoNetwork(mActivity)){        mLoadingManager.showNoNetwork();        return ;}// 显示Loading状态界面    mLoadingManager.showLoading();// 开启另一个线程进行数据的获取,在数据获取结束后调用 mLoadingManager.hideAll();getData();
0 0
原创粉丝点击