2023年7月13日发(作者:)
android使⽤DataBinding来设置空状态写在前⾯在平时的开发之中,我们需要对于数据加载的情况进⾏展⽰:1. 空数据2. ⽹络异常3. 加载中等等情况现在设置页⾯状态的⽅式有多种,由于笔者近期⼀直在使⽤databinding,⽽数据绑定通过改变模型来展⽰view的⽅式和状态页的设置也满契合的。所以这⾥就讲讲使⽤databinding来设置android中的各种状态页。很简单,先看看效果⾸先在app的⽂件中开启databindingandroid{ ... dataBinding { enabled = true }}我们先定义⼀些⽤于状态的注解EmptyState/** * 页⾯描述:空状态 *
* Created by ditclear on 2017/2/24. */@IntDef({NORMAL, PROGRESS, EMPTY, NET_ERROR, NOT_AVAILABLE})@Retention()public @interface EmptyState { int NORMAL = -1; //正常 int PROGRESS = -2;//显⽰进度条 int EMPTY = 11111; //列表数据为空 int NET_ERROR = 22222; //⽹络未连接 int NOT_AVAILABLE = 33333; //服务器不可⽤ //...各种页⾯的空状态,可以⾃⼰定义、添加}再⾃定义⼀个异常EmptyException⽤于显⽰我们需要的状态信息/** * 页⾯描述:异常 *
* Created by ditclear on 2017/3/5. */public class EmptyException extends Exception { private int code; public EmptyException(@EmptyState int code) { super(); = code; } @EmptyState public int getCode() { return code; } public void setCode(@EmptyState int code) { = code; }}现在,⼤多数展⽰状态页的控件都会提供1. 加载中的进度条2. 错误信息3. 空状态4. ...所以我们的⽬标也是显⽰这些布局以数据绑定的形式进⾏布局,使⽤StateModel来控制状态页展⽰的消息
* Created by ditclear on 2017/2/24. */public class StateModel extends BaseObservable { private Context mContext = ce(); @EmptyState private int emptyState = ; private boolean empty; public int getEmptyState() { return emptyState; } /** * 设置状态 * * @param emptyState */ public void setEmptyState(@EmptyState int emptyState) { tate = emptyState; notifyChange(); } /** * 显⽰进度条 * * @return */ public boolean isProgress() { return tate == SS; } /** * 根据异常显⽰状态 * * @param e */ public void bindThrowable(Throwable e) { if (e instanceof EmptyException) { @EmptyState int code = ((EmptyException) e).getCode(); setEmptyState(code); } } public boolean isEmpty() { return tate != ; } /** * 空状态信息 * * @return */ @Bindable public String getCurrentStateLabel() { switch (emptyState) { case : return ing(_data); case _ERROR: return ing(_check_net_state); case _AVAILABLE: return ing(_not_avaliabe); default: return ing(_data); } } /** * 空状态图⽚ * * @return */ @Bindable public Drawable getEmptyIconRes() { switch (emptyState) { case : return wable(mContext, _visibility_off_green_400_48dp); case _ERROR: return wable(mContext, _signal_wifi_off_green_400_48dp); case _AVAILABLE: return wable(mContext, _cloud_off_green_400_48dp); default: return wable(mContext, _visibility_off_green_400_48dp); } }}很普通的视图模型,主要有⼏个⽤于判断状态显⽰的⽅法1. bindThrowable 根据异常显⽰状态2. setEmptyState ⽅法⽤来设置当前的状态,通过notifyChange来通知布局⽂件改变下⾯讲讲实际运⽤:在activity或者fragment布局中,添加状态页的布局>() { @Override public void onStart() { t(); if (!eshing()) { tyState(SS); } } @Override public void onCompleted() { tyState(); } @Override public void onError(Throwable e) { reshing(false); rowable(e); xt(, rentStateLabel(), _SHORT).show(); } @Override public void onNext(List
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689215398a222189.html
评论列表(0条)