小编Mar*_*506的帖子

Android数据绑定:"方法引用使用'.' 已弃用"

在我的应用程序中使用数据绑定时,编译时会收到以下警告:

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}",它仍然会出错:'!=', '%', '*', '+', ',', '-', '.', '/', <, <<, <=, '==', '>', '>=', '>>', …

xml data-binding android android-studio android-databinding

13
推荐指数
1
解决办法
2839
查看次数

MPAndroidChart x轴日期/时间标签格式

背景

对于我的应用程序中的一些图表,我正在使用MPAndroidChart库.我的图表的所有水平轴都是基于时间的,它们可以跨越一整年,一个月,一周,一天或跨越一小时.它总是显示一个完整的周期,所以1月到12月,周一到周日,0:00-24:00等.轴的值始终是纪元时间戳(以秒为单位).

需求

我希望x轴标签遵循以下规则:

  • 本月1日在的情况下,一年跨度;
  • 周的情况下,在一天的开始 ;
  • 在任何一小时(##:00)(不是所有人),如果是一天的话 ;
  • 在一小时的任何5分钟点.

问题

我可以设置granularityx轴,这样可以确保两点之间的空间不小于颗粒度,但这可能意味着(在白天的情况下)第一个标签是凌晨1点,第二个标签是在凌晨2:01,第三个是在凌晨3:16,因为它符合(最小)60分钟的粒度.

当前不正确的情况,理想情况下会是这样的 [0:00, 3:00, 6:00, 9:00 ..]

现状示例

有没有办法控制x轴标签的定位,以达到上述结果?

format android date mpandroidchart

11
推荐指数
1
解决办法
8511
查看次数

Rx Kotlin:map函数无法推断返回类型

在连接到蓝牙设备的应用程序中,我使用以下函数使用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.

这里出了什么问题?我认为地图应该能够推断出返回类型.

android rx-kotlin reactivex

6
推荐指数
1
解决办法
3930
查看次数

在RealmMigration中创建对象并将其添加到RealmList

在我当前的应用程序中,我HolderObjectRealmObject带有扩展名)带有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)

要将所有旧HolderObjects 迁移到新对象,请使用我的自定义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)

android realm realm-migration

4
推荐指数
1
解决办法
1863
查看次数

片段 - onGlobalLayout()调用两次

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)

size layout android dimension

2
推荐指数
1
解决办法
3970
查看次数