Android加载页面开源库-GeneralPage使用手册

GeneralPage

Github地址 https://github.com/zfman/GeneralPage

该工具是对无数据页面、加载页面、异常页面进行简单的封装,它支持的页面:

  • 空数据页面
  • 加载异常页面
  • 正在加载页面

版本特性:
- v1.0.0(2018/2/8)
需要在XML中引入一个布局;
提供Fragment与Activity的基类,可以实现快速接入;

运行效果

Demo运行效果

下载Demo App

简单使用

Step 1:添加项目依赖

build.gradle文件中添加以下代码

compile 'com.zhuangfei:GeneralPage:1.0.0'

Step 2:引入布局

在需要的地方添加以下代码,当helper_layout显示出来时,它将撑满父级容器

<include layout="@layout/helper_layout"/>

Step 3:快速使用

用了能够更加方便的使用,你可以继承BaseActivity与BaseFragment。

扫描二维码关注公众号,回复: 770710 查看本文章

如果你用的是Activity,那么你只要保证getViewHelper()的调用在setContentView()之后就不会出现空指针的情况(即使你在布局文件中没有包含helper_layout布局),现在Activity的代码是这个样子的:

public class ExampleActivity extends BaseActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        inits();
    }

    private void inits() {
    //getViewHelper().showSuccessView();
    //getViewHelper().showEmptyView();
    //getViewHelper().showErrorView("网络连接出错了!");
    getViewHelper().showLoadingView();
    }
}

如果你用的是Fragment,那么你要保证你的初始化方法都在onViewCreated()方法中,并且在初始化前调用一下父类的onViewCreated()方法,之后就可以尽情的调用ViewHelper对象的方法了,现在Fragment的代码是这个样子的:

public class TabFragment1 extends BaseFragment {

    View mView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_tab1, container, false);
        return mView;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    //这句不能少,保证ViewHelper对象可以获取到View
        super.onViewCreated(view, savedInstanceState);
        inits();
    }

    private void inits() {
        getViewHelper().showLoadingView();
    }

}

这两个基类已经实现了OnViewHelperListener接口,如果需要处理空数据页面、异常页面的点击事件,可以重写onLoading()方法即可,该方法被触发后将自动转换到Loading状态,示例代码如下:

public class TabFragment2 extends BaseFragment {

    View mView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_tab2, container, false);
        return mView;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        inits();
    }

    private void inits() {
        getViewHelper().showErrorView("网络连接错误");
    }

    @Override
    public void onLoading() {
        Toast.makeText(getActivity(),"重新加载中..",Toast.LENGTH_SHORT).show();
    }
}

不使用基类

BaseActivity以及BaseFragment让整个过程简单了一点,如果你不想使用BaseActivity以及BaseFragment,那么也是可以的。

在BaseActivity以及BaseFragment中其实只做了初始化ViewHelper对象,目的是简化初始化ViewHelper对象,如果不使用BaseActivity、BaseFragment,那么应该先初始化ViewHelper对象,然后就可以随意调用它的方法了。

Actiivty的代码是这样的:

public class ExampleActivity extends AppCompatActivity{

    private ViewHelper mViewHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        //获取View以及初始化ViewHelper
        View view=((ViewGroup) this.findViewById(android.R.id.content)).getChildAt(0);
        mViewHelper=new ViewHelper(view);

        inits();
    }

    private void inits() {
        //加载页面
        mViewHelper.showLoadingView();
    }
}

Fragment的代码是这样的:

public class TabFragment1 extends Fragment {

    View mView;
    ViewHelper mViewHelper;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_tab1, container, false);
        mViewHelper=new ViewHelper(mView);
        return mView;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        inits();
    }

    private void inits() {
        mViewHelper.showLoadingView();
    }

}

如果需要监听空数据页面、异常页面的点击事件,Activity的做法如下:

public class ExampleActivity extends AppCompatActivity implements OnViewHelperListener{

    private ViewHelper mViewHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        //获取View以及初始化ViewHelper
        View view=((ViewGroup) this.findViewById(android.R.id.content)).getChildAt(0);
        mViewHelper=new ViewHelper(view);

        inits();
    }

    private void inits() {
        mViewHelper.setOnViewHelperListener(this);
        //加载页面
        mViewHelper.showErrorView("网络连接错误");
    }

    @Override
    public void onLoading() {
        Toast.makeText(getActivity(),"重新加载中..",Toast.LENGTH_SHORT).show();
    }
}

Fragment的做法如下:

public class TabFragment2 extends Fragment implements OnViewHelperListener{

    View mView;
    ViewHelper mViewHelper;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_tab1, container, false);
        mViewHelper=new ViewHelper(mView);
        return mView;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        inits();
    }

    private void inits() {
        mViewHelper.showErrorView("网络连接错误");
    }

    @Override
    public void onLoading() {
        Toast.makeText(getActivity(),"重新加载中..",Toast.LENGTH_SHORT).show();
    }
}

API

ViewHelper是核心类,在使用前需要初始化(使用基类则不需要):

mViewHelper=new ViewHelper(mView);

为其设置点击监听器,以实现加载失败后重新加载的功能(使用基类则不需要):

mViewHelper.setOnViewHelperListener(this);

重写onLoading()方法

@Override
    public void onLoading() {
        Toast.makeText(getActivity(),"重新加载中..",Toast.LENGTH_SHORT).show();
    }

提供四个方法:

//调用后将隐藏提示布局
showSuccessView()

//调用后显示空数据页面
showEmptyView()

//调用后显示错误信息
showErrorView(String msg)

//调用后显示加载页面
showLoadingView()

自定义布局

现有的几个布局都很简陋,如果它不能满足需求,你可以自定义,假设目前要自定义加载页面,其他几个页面保持不变。

上文说了,我们要引用helper_layout,那么这个文件是什么?源码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/helper_container"
    android:orientation="vertical">

    <include layout="@layout/helper_loading" />
    <include layout="@layout/helper_error" />
    <include layout="@layout/helper_empty" />

</LinearLayout>

可见这三个布局依次为加载页面、错误页面、空数据页面,那么自定义布局首先需要定义一个自己的helper_layout.xml文件,起个名字就叫custom_helper_layout.xml,,然后用自定义的页面替换原有的某个页面,不需要替换的保持不变。

具体步骤如下:
- 创建一个布局文件 custom_helper_layout.xml,其代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/helper_container"
    android:orientation="vertical">

    <include layout="@layout/custom_helper_loading" />

    <!--不需要变化-->
    <include layout="@layout/helper_error" />
    <include layout="@layout/helper_empty" />


</LinearLayout>

以下是custom_helper_loading.xml的内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_loading"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <ProgressBar
        android:layout_width="40dp"
        android:layout_height="40dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textColor="@color/app_gray"
        android:text="这是自定义的加载页面~~"/>
</LinearLayout>

最后在引用布局的时候使用自定义的布局即可,示例如下:

<include layout="@layout/custom_helper_layout"/>

自定义布局时,自定义页面的根View必须为LinearLayout且ID必须为以下值:

序号 页面 id
1 加载页面 layout_loading
2 错误页面 layout_error
3 空数据页面 layout_empty

如果是错误页面,那么在该布局内应该包含一个idtextview_errorTextView控件

猜你喜欢

转载自blog.csdn.net/lzhuangfei/article/details/79292245