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

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值