AndroidStudio 升级Gradle5.0 Databinding报错

前天AS出了新版本3.4,故升级。与之匹配升级的还有Gradle Plugin 3.4,Gradle5.1.1。升级后,build程序的时候,就报错了 DataBinderMapperImpl.java:54: error: cannot find symbole: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors. ****/ data binding error ****msg:Missing import expression although it is registered 字面意思是Databinding缺少导入,但是我核查了几遍,发现并没有缺少,因为我什么都没有做修改。比较奇怪。 去SOF查询了下,…

RecyclerView 点击事件处理

RecyclerView不像ListView那样,提供了setOnItemClickListener,所以一般情况需要我们自己定义一个接口实现这个功能。我一般会通过Adapter去暴露出来一个接口,便于上层获取位置和点击事件。 首先在Adapter中新建一个接口 public static interface OnItemClickListener { void onItemClicked(View v, int postion); } 创建一个对应的实例,并且提供set/get方法 private OnItemClickListener onItemClickListener; public OnItemClickListener getOnItemClickListener() { return onItemClickListener; } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } 在onCreateViewHolder的时候,给获取的view设置点击事件 view.setOnClickListener(this); 在onBindViewHolder时,将位置信息传递给view的holder中view的tag里 holder.itemview.setTag(position); 实现onClick事件的时候,调用自己定义的接口,将位置信息传递给调用者 @Override…

GoogleCast集成简介

最近由于需要维护这一方面的东西,随即看了一下网络文档。发现中文圈还比较少。这篇就作为我的记录。详细的信息建议在在Google Cast官方文档里面查看,非常的全。Google Cast之前叫做Google Chromecast,可以把它理解成为一个SDK。硬件可以实现这样的SDK,例如国外的一些盒子,FireTV,PCCW的盒子以及谷歌自己的Chromecast硬件设备。**它的作用就是能将手机,Pad,浏览器的内容投射到连接有Chromecast设备的屏幕上。**挺方便的,在家看个YouTube或者在工作场所需要投屏展示内容的时候,都非常的便利。 Google Cast 分为两端:sender和receiver。就拿U2B举例子,在Android手机安装的软件叫做sender,在盒子里相应接收响应请求的叫做receiver。一般来Google自家的程序会有一个默认的由谷歌开发的receiver,当然还可以通过API自定义一个可以处理定制化的sender消息的receiver,例如TED的receiver。 Receiver的结构挺有意思,其实就是一个能运行Chrome的硬件设备,通过网络去请求某个服务器里面的HTML&CSS&JS,然后打开这个网页播放视频。 在Google Cast SDK v3 Codelab基本涵盖了日常开发需要的步骤,引入SDK,添加CastButton,增加MiniController,添加Notification和LockScreen等等,非常详细,建议好好利用。…

Android show/hide softKeyboard

最近项目中需要有一个地方隐藏键盘和显示键盘。其实是一个比较简单的问题,但是由于我们项目架构的原因。一个Activity中内嵌了很多个Fragment,通过事件去驱动不同的Fragment展现出来。举个例子,注册流程实际上是一个Activity,然后其中包含了ResetPasswordFragment,forgetPasswordFramgent,loginFragment等等。如果用户在Login界面的EditView输入账号密码的时候,通过back键恢复到了上一个Activity的时候,键盘是无法隐藏掉的。 为了解决这个问题,我的第一次解决的方案是这样。通过在VM层中添加一个变量hideSoftKeyboard,然后给XML设定一个自定义的BindingAdapter,传入这个变量。 @BindingAdapter("showSoftKeyboard") public static void showSoftKeyboard(View view, Boolean showSoftKeyboard) { if (!showSoftKeyboard) { InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } } 但是这样会出现一个问题,…

RxJava ignoreElement改造成Completable

这两天被一个RxJava的操作符给坑了,就是ignoreElement()。我们在Post一个请求的时候,例如上传用户信息到API当中。 public Observable<Void> delete(String profileId) { return accountApi.deleteProfileById(profileId, null) .ignoreElements(); } 如果这样写的话,会导致上在调用这个delete接口的时候,无法执行**onNext()**里面的逻辑,为什么会这个样子,具体文档里面给的图 很简单明了就可以知道。可以看看ignoreElements这个Operator怎么实现的: public static <T> OperatorIgnoreElements<T> instance() { return (OperatorIgnoreElements<T>) Holder.INSTANCE; } OperatorIgnoreElements() { // singleton } @Override public Subscriber<…