android 加载布局的两种方式
- QuickLoadLayout
- SuperLoadLayout
完美支持 androidx 和 Android 库。
使用方法,在使用的子 build.gradle 中添加配置
implementation 'vip.ruoyun.widget:quick-load-layout:1.0.3'- loadEmptyLayout : 没有数据显示的界面,对应状态 LoadMode.NO_DATA
- loadErrorLayout : 网络错误显示的界面,对应状态 LoadMode.ERROR
- loadLoadingLayout : 加载中的界面,对应状态 LoadMode.LOADING
- loadNoNetworkLayout : 没有网络显示的界面,对应状态 LoadMode.NO_NETWORK
- 成功的界面 : LoadMode.SUCCESS
<vip.ruoyun.widget.quick.QuickLoadLayout android:id="@+id/mQuickLoadLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:loadEmptyLayout="@layout/quick_layout_load_no_data" app:loadErrorLayout="@layout/quick_layout_load_error" app:loadLoadingLayout="@layout/quick_layout_load_loading" app:loadNoNetworkLayout="@layout/quick_layout_load_no_network"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是内容" /> </vip.ruoyun.widget.quick.QuickLoadLayout>
可以添加点击事件,重新加载,NO_DATA,ERROR,NO_NETWORK 的布局会响应此事件
mQuickLoadLayout = findViewById(R.id.mQuickLoadLayout); mQuickLoadLayout.setOnReloadListener(new QuickLoadLayout.OnReloadListener() { @Override public void onReload() { mQuickLoadLayout.setLoadMode(QuickLoadLayout.LoadMode.LOADING); } });
public class QuickLoadLayoutActivity extends AppCompatActivity { private Handler handler = new Handler(); private QuickLoadLayout mQuickLoadLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quick_load_layout); mQuickLoadLayout = findViewById(R.id.mQuickLoadLayout); mQuickLoadLayout.setOnReloadListener(new QuickLoadLayout.OnReloadListener() { @Override public void onReload() { mQuickLoadLayout.setLoadMode(QuickLoadLayout.LoadMode.LOADING); handler.postDelayed(new Runnable() { @Override public void run() { mQuickLoadLayout.setLoadMode(QuickLoadLayout.LoadMode.SUCCESS); } }, 2000); } }); mQuickLoadLayout.setLoadMode(QuickLoadLayout.LoadMode.LOADING); handler.postDelayed(new Runnable() { @Override public void run() { mQuickLoadLayout.setLoadMode(QuickLoadLayout.LoadMode.ERROR); } }, 2000); } }
使用方法,在使用的子 build.gradle 中添加配置
implementation 'vip.ruoyun.widget:super-load-layout:1.0.3'<vip.ruoyun.widget.superlayout.SuperLoadLayout android:id="@+id/mSuperLoadLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是成功界面" /> </vip.ruoyun.widget.superlayout.SuperLoadLayout>
public class SuperCreateLoadBuildHelper { public static SuperLoadLayout.Builder create(IFetchData iFetchData) { return new SuperLoadLayout.Builder() .buildCreateErrorLayout(new ErrorILoadLayoutState(iFetchData))//网络错误 .buildCreateLoadingLayout(new LoadingLayoutState(iFetchData))//加载中 .buildCreateNoDataLayout(new NoDataLayoutState(iFetchData))//没有数据 .buildCreateNoNetworkLayout(new NoNetworkLayoutState(iFetchData))//没有网络 .build(); } }
创建对应的状态,需要实现 ISuperLoadLayoutState 接口,
public class LoadingLayoutState implements ISuperLoadLayoutState { //或者通过接口来实现 private IFetchData iFetchData; public LoadingLayoutState(IFetchData iFetchData) { this.iFetchData = iFetchData; } @Override public int onCreateLayoutId() {//对应的布局 return R.layout.layout_load_loading; } @Override public void onCreateView(View view) { //在这里进行一些 findviewbyid //setOnClick 等操作 } @Override public void onShow() { //当界面要展示的时候,会回调此方法,比如开始动画 } @Override public void onHide() { //当界面要展示的时候,会回调此方法,比如结束动画 } }
把创建好的 build 传入到 SuperLoadLayout 类中。
mSuperLoadLayout.setBuilder(SuperCreateLoadBuildHelper.create(this));
public interface IFetchData { void fetchData();//加载数据的接口 } public class SuperLoadLayoutActivity extends BaseActivity { private SuperLoadLayout mSuperLoadLayout; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_super_load_layout); mSuperLoadLayout = findViewById(R.id.mSuperLoadLayout); mSuperLoadLayout.setBuilder(SuperCreateLoadBuildHelper.create(this)); mSuperLoadLayout.setLoadMode(SuperLoadLayout.LoadMode.LOADING); handler.postDelayed(new Runnable() { @Override public void run() { mSuperLoadLayout.setLoadMode(QuickLoadLayout.LoadMode.NO_NETWORK); } }, 2000); } @Override public void fetchData() { mSuperLoadLayout.setLoadMode(SuperLoadLayout.LoadMode.LOADING); handler.postDelayed(new Runnable() { @Override public void run() { mSuperLoadLayout.setLoadMode(SuperLoadLayout.LoadMode.SUCCESS); } }, 3000); } }