zoukankan      html  css  js  c++  java
  • android 应用架构随笔六(Loading加载页面)

    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    import com.heima.googleplay.R;
    import com.heima.googleplay.manager.ThreadManager;
    import com.heima.googleplay.utils.UIUtils;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;
    import android.widget.FrameLayout;
    /**
     * 
     * 
     * ============================================================
     **/
    public abstract class LoadingPage extends FrameLayout {
        //默认状态
        private final int UN_LOADING  =  1;
        //加载状态
        private final int LOADING = 2;
        //加载失败状态
        private final int ERROR = 3;
        //加载成功。然后服务器没有返回数据
        private final int EMPTY = 4;
        //加载成功的状态
        private final int SUCCESS = 5;
        //用来记录某种状态
        private int mState;
        private View mLoadingView;
        private View mErrorView;
        private View mEmptyView;
    
        private View mSuccessView;
        public LoadingPage(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }
    
        private void init() {
            //首先赋值
            mState = UN_LOADING;
            
            mLoadingView = createLoadingView();
            
            if(null != mLoadingView){
                addView(mLoadingView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            }
            
            mErrorView = createErrorView();
            
            if(null != mErrorView){
                addView(mErrorView,new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            }
            
            mEmptyView = createEmptyView();
            
            if(null != mEmptyView ){
                addView(mEmptyView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            }
            //成功页面根据业务不同页面将不同,所以在此无法添加统一界面
         //只能在主线程中展示出来 showSafePage(); }
      
    private void showSafePage() { UIUtils.runInMainThread(new Runnable() { @Override public void run() { showPage(); } }); }
      //三种页面已经添加到FrameLayout中,通过显示和隐藏来控制显示那个
    protected void showPage() { if(null != mLoadingView){ mLoadingView.setVisibility(mState == UN_LOADING || mState == LOADING ? View.VISIBLE : View.INVISIBLE); } if(null != mErrorView){ mErrorView.setVisibility(mState == ERROR ? View.VISIBLE : View.INVISIBLE); } if(null != mEmptyView){ mEmptyView.setVisibility(mState == EMPTY ? View.VISIBLE : View.INVISIBLE); } if(null == mSuccessView && mState == SUCCESS ){ mSuccessView = createSuccessView(); addView(mSuccessView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } if(null != mSuccessView){ mSuccessView.setVisibility(mState == SUCCESS ? View.VISIBLE : View.INVISIBLE); } } public abstract View createSuccessView();//创建成功后显示的业务界面 private View createEmptyView() { // TODO Auto-generated method stub return UIUtils.inflate(R.layout.loading_page_empty); } private View createErrorView() { // TODO Auto-generated method stub return UIUtils.inflate(R.layout.loading_page_error); } private View createLoadingView() { // TODO Auto-generated method stub return UIUtils.inflate(R.layout.loading_page_loading); } public LoadingPage(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LoadingPage(Context context) { super(context); init(); } // //加载失败状态 // private final int ERROR = 3; // //加载成功。然后服务器没有返回数据 // private final int EMPTY = 4; // //加载成功的状态 // private final int SUCCESS = 5; public enum LoadResult{ ERROR(3),EMPTY(4),SUCCESS(5); int value ; LoadResult(int value){ this.value = value; } public int getValue() { return value; } }
      //利用线程池
    private class LoadTask implements Runnable{ @Override public void run() { final LoadResult result = Load(); UIUtils.runInMainThread(new Runnable() { @Override public void run() { mState = result.getValue(); showPage(); } }); } } public void show() { if(mState == ERROR || mState == EMPTY){ mState = UN_LOADING; } if(mState == UN_LOADING){ mState = LOADING; LoadTask task = new LoadTask(); ThreadManager.getLongPool().execute(task); // ExecutorService service = Executors.newFixedThreadPool(3); // LoadTask task = new LoadTask(); // service.execute(task); } showSafePage();//加载完数据,在主线程中展示界面出来
    }   
      
      //从服务器加载数据,返回加载状态(加载数据成功、失败?)
    public abstract LoadResult Load() ; }
    import java.util.List;
    
    import com.heima.googleplay.utils.UIUtils;
    import com.heima.googleplay.utils.ViewUtils;
    import com.heima.googleplay.widget.LoadingPage;
    import com.heima.googleplay.widget.LoadingPage.LoadResult;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.ViewParent;
    
    public abstract class BaseFragment extends Fragment {
    
        private LoadingPage mContentPage;
        
        
        
        //setContentView
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            //当前的view已经有了一个父亲。必须移除
            if(mContentPage == null){
                mContentPage = new LoadingPage(UIUtils.getContext()) {
    
                    @Override
                    public View createSuccessView() {
                        // TODO Auto-generated method stub
                        return BaseFragment.this.createSuccessView();
                    }
    
                    @Override
                    public LoadResult Load() {
                        // TODO Auto-generated method stub
                        return BaseFragment.this.load();
                    }
                };
            }else{
                ViewUtils.removeSelfFromParent(mContentPage);
            }
            
            return mContentPage;
        }
        /**
         * 检查服务器返回的json数据
         * @param object
         * @return
         */
        protected LoadResult chece(Object object) {
            if (object == null) {
                return LoadResult.ERROR;
            }
            if (object instanceof List) {
                List list = (List) object;
                if (list.size() == 0) {
                    return LoadResult.EMPTY;
                }
            }
    
            return LoadResult.SUCCESS;
        }
    
        protected abstract LoadResult load();
    
        protected abstract View createSuccessView();
    
        //在MainActivity中调用
        public void show() {
            if (null != mContentPage) {
                mContentPage.show();
            }
    
        }
    
    }
    View Code
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.app.FragmentStatePagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.Menu;
    
    import com.heima.googleplay.fragment.AppFragment;
    import com.heima.googleplay.fragment.BaseFragment;
    import com.heima.googleplay.fragment.FragmentFactory;
    import com.heima.googleplay.fragment.GameFragment;
    import com.heima.googleplay.fragment.HomeFragment;
    import com.heima.googleplay.utils.UIUtils;
    import com.heima.googleplay.widget.PagerTab;
    
    public class MainActivity extends BaseActivity implements OnPageChangeListener {
    
    
        private PagerTab mTabs;
        private ViewPager mPager;
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
         private class MainAdapter extends FragmentStatePagerAdapter{
    
            private String[] tab_names;
            private BaseFragment fragment;
    
            public MainAdapter(FragmentManager fm) {
                super(fm);
                tab_names = UIUtils.getStringArray(R.array.tab_names);
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                // TODO Auto-generated method stub
                return tab_names[position];
            }
            
            @Override
            public Fragment getItem(int position) {
                
                return FragmentFactory.createFragment(position);
            }
    
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return tab_names.length;
            }
             
         }
    
        @Override
        protected void initView() {
            setContentView(R.layout.activity_main);
            mTabs = (PagerTab) findViewById(R.id.tabs);
            mPager = (ViewPager) findViewById(R.id.pager);
            MainAdapter adapter = new MainAdapter(getSupportFragmentManager());
            mPager.setAdapter(adapter);
            //绑定到一起
            mTabs.setViewPager(mPager);
            mTabs.setOnPageChangeListener(this);
        }
    
        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void onPageSelected(int arg0) {
            BaseFragment fragment = FragmentFactory.createFragment(arg0);
            fragment.show();
        }
    
    }
    MainActivity
  • 相关阅读:
    HDU4341 Gold miner 分组背包
    卡特兰数
    欧拉函数
    求一个阶乘数尾零的个数
    线性时间 筛素数,求前n个数的欧拉函数值,求前n个数的约数个数
    HDU4335 What is N? 欧拉函数,欧拉定理
    HDU4336 Card Collector 容斥定理 Or 概率DP
    ie8恶心的bug4个小时的教训
    39个超实用jQuery实例应用特效
    ECSHOP 模板结构说明
  • 原文地址:https://www.cnblogs.com/ecollab/p/6079983.html
Copyright © 2011-2022 走看看