安卓单页面多种状态切换(使用了Fragment技术,包含正常页面,网络访问失败页面和网络访问成功页面)
首先来看下效果图:
主要分为正常页面,网络访问失败页面和网络访问成功页面。
在这里我们可以在NormalFragment进行网络访问操作。
下面我们来一步步实现:
首先抽取了BaseFragment类:
public abstract class BaseFragment extends Fragment {
//初始化View
protected abstract View initView();
//初始化数据
protected abstract void initData();
protected Activity mActivity;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mActivity = getActivity();
View view = initView();
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//更新布局
initData();
}
}
使用了抽象方法,子类必须实现initView来初始化页面,至于
onCreateView
和
转载请注明出处:http://blog.csdn.net/u010724819/article/details/53432899
onActivityCreated
方法,大家可以参照Fragment的生命周期。
接下来写三个类,分别用来展示三种页面,同时需要继承BaseFragment
具体的写法也很简单,我贴在下面了:
NormalFragment()
public class NormalFragment extends BaseFragment {
@Override
protected View initView() {
View view = View.inflate(getActivity(), R.layout.normal_main, null);
Button btn_suc = (Button) view.findViewById(R.id.btn_start_success);
btn_suc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initFragment(3);
}
});
Button btn_fail = (Button) view.findViewById(R.id.btn_start_failed);
btn_fail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initFragment(2);
}
});
return view;
}
@Override
protected void initData() {
}
}
SuccessFragment (成功页面)
public class SuccessFragment extends BaseFragment { @Override protected View initView() { View view = View.inflate(getActivity(), R.layout.success_layout, null); Button btn = (Button) view.findViewById(R.id.btn_retry); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { initFragment(1); } }); return view; } @Override protected void initData() { } }
FailedFragment(失败页面)
public class FailedFragment extends BaseFragment { @Override protected View initView() { View view = View.inflate(getActivity(), R.layout.failed_layout, null); Button btn = (Button) view.findViewById(R.id.btn_retry); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { initFragment(1); } }); return view; } @Override protected void initData() { } }
MainActivity的关联方式:好的,这样就基本完成啦!private void initFragment() { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fl_layout, new NormalFragment(), "normal"); fragmentTransaction.commit(); }
下面来改造一下BaseFragment来切换不同的状态页面:这里贴出了完整的代码,核心代码是:initFragement(int flag);public abstract class BaseFragment extends Fragment { //初始化View protected abstract View initView(); //初始化数据 protected abstract void initData(); protected Activity mActivity; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mActivity = getActivity(); View view = initView(); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //更新布局 initData(); } public void initFragment(int flag) { FragmentManager fm = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); if (flag == 1) { fragmentTransaction.replace(R.id.fl_layout, new NormalFragment(), "normal"); } else if (flag == 2) { fragmentTransaction.replace(R.id.fl_layout, new FailedFragment(), "failed"); } else if (flag == 3) { fragmentTransaction.replace(R.id.fl_layout, new SuccessFragment(), "success"); } fragmentTransaction.commit(); } }
好的,这样既可以实现相关的页面切换啦。大家有啥不清楚的可以参考我的源码,这里给出源码地址:https://github.com/yeluowuhen502/MultiStateTest点击打开链接看到这里,恭喜你,你是一个喜欢探索的人,这里分享一个非常好用的显示不同状态页的开源项目,可以直接集成到项目中哦:https://github.com/Kennyc1012/MultiStateView点击打开链接