在我的应用程序中使用数据绑定时,编译时会收到以下警告:
Warning:Method references using '.' is deprecated. Instead of 'handler.onItemClick', use 'handler::onItemClick'
请参阅下面的XML.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="handler" type="ClickHandler"/>
<variable name="active" type="boolean"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="@{!active ? handler.onItemClick : null}"
android:background="@color/backgroundWhite"/>
</RelativeLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
请注意:来自条件声明
非常直截了当的消息,直到我改变'.' 至 '::'.
android:onClick="@{!active ? handler::onItemClick : null}"
Run Code Online (Sandbox Code Playgroud)
由于onItemClick在条件语句中,它似乎将两个::'中的第一个解释为条件的'else'语句.在第二个':',我收到错误:
<expr> expected, got ':'
编辑:正如@CommonsWare在评论中建议的那样,反转语句
"@{active ? null : handler::onItemClick}"
也没有帮助,显示了类似的错误(见注释)
编辑2:显然,当剥离条件语句,留下时"@{handler::onItemClick}"
,它仍然会出错:'!=', '%', '*', '+', ',', '-', '.', '/', <, <<, <=, '==', '>', '>=', '>>', …
背景
对于我的应用程序中的一些图表,我正在使用MPAndroidChart库.我的图表的所有水平轴都是基于时间的,它们可以跨越一整年,一个月,一周,一天或跨越一小时.它总是显示一个完整的周期,所以1月到12月,周一到周日,0:00-24:00等.轴的值始终是纪元时间戳(以秒为单位).
需求
我希望x轴标签遵循以下规则:
问题
我可以设置granularity
x轴,这样可以确保两点之间的空间不小于颗粒度,但这可能意味着(在白天的情况下)第一个标签是凌晨1点,第二个标签是在凌晨2:01,第三个是在凌晨3:16,因为它符合(最小)60分钟的粒度.
当前不正确的情况,理想情况下会是这样的 [0:00, 3:00, 6:00, 9:00 ..]
题
有没有办法控制x轴标签的定位,以达到上述结果?
在连接到蓝牙设备的应用程序中,我使用以下函数使用RxKotlin:
private fun startBluetoothPair(device: BluetoothDevice) {
Observable.just(device)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map {
var uuid: UUID = BLUETOOTH_UUID
var socket = it.createRfcommSocketToServiceRecord(uuid)
socket.connect()
return socket
}
.subscribe {
// Do something with the BluetoothSocket
}
}
Run Code Online (Sandbox Code Playgroud)
这个函数应该只是在背景上与蓝牙设备连接,然后对套接字做一些事情(再次在主线程中).但是,map
无法处理的return socket
部分,告诉我有一个Type mismatch
,它找到了BluetoothSocket
它需要的地方Unit
.
这里出了什么问题?我认为地图应该能够推断出返回类型.
在我当前的应用程序中,我HolderObject
(RealmObject
带有扩展名)带有long
“ machineId”。在该应用程序的新版本中,HolderObject
它将能够以RealmList的形式包含更多计算机。请参阅以下课程:
旧物件:
public class HolderObject extends RealmObject{
private long machineId;
//.. getters and setters
}
Run Code Online (Sandbox Code Playgroud)
新对象:
public class HolderObject extends RealmObject{
private RealmList<RealmLong> machineIds;
//.. getters and setters
}
Run Code Online (Sandbox Code Playgroud)
在RealmLong
如下:
public class RealmLong extends RealmObject {
private long val;
//.. getters and setters
}
Run Code Online (Sandbox Code Playgroud)
要将所有旧HolderObject
s 迁移到新对象,请使用我的自定义RealmMigration。如下所示:
public class CustomRealmMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
schema.get("HolderObject") …
Run Code Online (Sandbox Code Playgroud) public class QuadPadFragment extends Fragment {
int w = 0; int h = 0;
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.quadpadlayout, container, false);
container.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
h = container.getMeasuredHeight();
w = container.getMeasuredWidth();
Log.w("QuadPad Fragment:------", "window width: " + w + " window height: " + h );
view.setLayoutParams(new LayoutParams(1, 1));
}
});
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
我上面写的课,一切正常,但令我困惑的是为什么onGlobalLayout被调用了两次?我得到这个输出Log
:
W/QuadPad Fragment:------(27180): window width: 1080 window height: 1 …
Run Code Online (Sandbox Code Playgroud)