安卓单页面多种状态切换(使用了Fragment技术,包含正常页面,网络访问失败页面和网络访问成功页面)

    xiaoxiao2021-12-14  21

    安卓单页面多种状态切换(使用了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点击打开链接

    转载请注明原文地址: https://ju.6miu.com/read-962534.html

    最新回复(0)