抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)

来源:互联网 发布:linux搜狗输入法设置 编辑:程序博客网 时间:2024/05/16 12:57

抽取Fragment 和对抽取的Fragment进行应用(心得用的时候稍微修改就可以了)

界面处理放在LoadingPage里面

public abstract class LoadingPage extends FrameLayout {
private View loadingView;// 正在加载中的view对象
private View errorView;// 加载失败的view对象
private View emptyView;// 加载为空的view对象
private View successView;// 加载成功的view对象
protected static final int STATUS_LOADING = 0;// 正在加载的状态
protected static final int STATUS_UNKNOWN = 4;// 位置的状态

// 服务器返回的三种状态public final  static int STATUS_ERROR = 1;// 加载错误的状态public final static int STATUS_EMPTY = 2;// 加载为空的状态public final  static int STATUS_SUCCESS = 3;// 加载成功的状态private int state = STATUS_LOADING;// 进来默认正在加载public LoadingPage(Context context) {    super(context);    init();}public LoadingPage(Context context, AttributeSet attrs) {    super(context, attrs);    init();}public LoadingPage(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    init();}/** * 将几种不同的 界面添加到FrameLayout中 */protected void init() {    if (loadingView == null) {        loadingView = createLoadingView(); // 创建加载中的界面        this.addView(loadingView, new LayoutParams(                LayoutParams.MATCH_PARENT, -1));    }    if (errorView == null) {        errorView = createErrorView(); // 创建加载失败的view对象        this.addView(errorView, new LayoutParams(                LayoutParams.MATCH_PARENT, -1));    }    if (emptyView == null) {        emptyView = createEmptyView();// 创建加载为空的界面        this.addView(emptyView, new LayoutParams(                LayoutParams.MATCH_PARENT, -1));    }}/** * 创建加载中的界面 *  * @return */private View createLoadingView() {    // xml --- view    return UIUtils.inflate(R.layout.page_loading);}/** * 创建加载失败的界面 *  * @return */private View createErrorView() {    View view = UIUtils.inflate(R.layout.page_error);    view.findViewById(R.id.page_bt).setOnClickListener(            new OnClickListener() {                @Override                public void onClick(View v) {                    // 点击后重新请求网络                    show();                }            });    return view;}/** * 创建加载为空的界面 *  * @return */private View createEmptyView() {    return UIUtils.inflate(R.layout.page_empty);}/** * 根据服务器返回的结果 切换界面 */public void show() {    // 上一个状态是错误状态 重新修改为正在加载    if (state == STATUS_ERROR) {        state = STATUS_LOADING;    }    // 状态改变后重新显示界面    showPage();    ThreadUtils.runOnBackThread(new Runnable() {        @Override        public void run() {            SystemClock.sleep(3000);            state = load();            ThreadUtils.runOnUiThread(new Runnable() {                @Override                public void run() {                    showPage();// 根据不同的状态切换不同的界面                }            });        }    });}/** * / 根据不同的状态切换界面 */public void showPage() {    // private View loadingView;// 正在加载中的view对象    // private View errorView;// 加载失败的view对象    // private View emptyView;// 加载为空的view对象    // private View successView;// 加载成功的view对象    // 在状态为 正在加载/未知 显示    if (loadingView != null) {        loadingView.setVisibility(state == STATUS_LOADING                || state == STATUS_UNKNOWN ? View.VISIBLE : View.INVISIBLE);    }    // 状态为 错误 显示错误界面    if (errorView != null) {        errorView.setVisibility(state == STATUS_ERROR ? View.VISIBLE                : View.INVISIBLE);    }    // 获取服务器数据 但是数据为空 显示为空界面    if (emptyView != null) {        emptyView.setVisibility(state == STATUS_EMPTY ? View.VISIBLE                : View.INVISIBLE);    }    if (state == STATUS_SUCCESS) { // 只有状态为success 的时候才去创建成功界面        if (successView == null) {            successView = createSuccessView();            this.addView(successView, new LayoutParams(-1, -1));        }else {            successView.setVisibility(View.VISIBLE);        }    }else{        if (successView != null) {            successView.setVisibility(View.INVISIBLE);        }    }}/** * 加载网络数据   是子线程调用 * @return */public abstract int load() ;/** *当网络请求成功后  创建成功界面 * @return */public abstract View createSuccessView();

}

网络加载和显示界面放在BaseFrament
public abstract class BaseFragment extends Fragment {

private LoadingPage loadingPage;@Overridepublic void onDestroyView() {    super.onDestroyView();    // 一个view 不能 有多个父view    // frameLayout从 父view中移除    ViewUtils.removeFromParent(loadingPage);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,        Bundle savedInstanceState) {    if (loadingPage == null) {        // 创建帧布局        loadingPage = new LoadingPage(UIUtils.getContext()) { // 1.init                                                                // 将几种不同的界面添加到LoadingPage            @Override            public int load() {                // LoadingPage 无法加载网络 数据 交给BaseFragment做 网络请求                return BaseFragment.this.load();            }            @Override            public View createSuccessView() {                return BaseFragment.this.createSuccessView();            }        };    }    showPage();// 根据不同的状态切换界面    return loadingPage;}private void showPage() {    loadingPage.showPage();}public void show() {    loadingPage.show();}// // 服务器返回的三种状态// public final static int STATUS_ERROR = 1;// 加载错误的状态// public final static int STATUS_EMPTY = 2;// 加载为空的状态// public final static int STATUS_SUCCESS = 3;// 加载成功的状态/** 检测从服务器返回的 数据 */protected int checkDatas(List<? extends Object> datas) {    if (datas == null) {        return LoadingPage.STATUS_ERROR;    } else {        if (datas.size() == 0) {            return LoadingPage.STATUS_EMPTY;        } else {            return LoadingPage.STATUS_SUCCESS;        }    }}/** * 创建加载成功界面 *  * @return */protected abstract View createSuccessView();/** * 访问网络 ./访问服务器 返回对应的状态 protected final int STATUS_ERROR = 1;// 加载错误的状态 * protected final int STATUS_EMPTY = 2;// 加载为空的状态 protected final int * STATUS_SUCCESS = 3;// 加载成功的状态 *  * @return */protected abstract int load();

}

具体页面处理

public class HomeFragment extends BaseFragment {

@Overridepublic void onActivityCreated(Bundle savedInstanceState) {    super.onActivityCreated(savedInstanceState);    show();}/** * 2. 创建成功界面 只有网络加载成功后才去创建成功界面 */@Overrideprotected View createSuccessView() {    return xxx;}/** * 1. 加载网络数据 */@Overrideprotected int load() { LoadingPage.STATUS_SUCCESS;}

}

主入口MainActivity
// 初始化 indicater
PagerTabStrip tabStrip = (PagerTabStrip) findViewById(R.id.pager_title_strip);
tabStrip.setTabIndicatorColorResource(R.color.indicatorcolor);
// 初始化 viewpager

    mViewPager = (ViewPager) findViewById(R.id.viewpager);    mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));    mViewPager            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {                @Override                public void onPageSelected(int position) {                    super.onPageSelected(position);                    BaseFragment fragment = FragmentFactory.createFragment(position);                    fragment.show();                }            });

适配MyPagerAdapter
class MyPagerAdapter extends FragmentStatePagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {        super(fm);    }    @Override    public Fragment getItem(int position) {        return FragmentFactory.createFragment(position);    }    @Override    public int getCount() {        return tabNames.length;    }    @Override    public CharSequence getPageTitle(int position) {        return tabNames[position];    }}
阅读全文
0 0
原创粉丝点击