小编Hai*_*ang的帖子

在AppWidget的RemoteViewsFactory中onCreated()之后依赖对onDataSetChanged()的调用是否安全?

我在我的开发AppWidget根据Android的文档,装我的光标onCreate(),并在重新加载它onDataSetChanged(),一切工作正常,直到我把我的一些断点RemoteViewsService.RemoteViewsFactory,并惊奇地发现,onDataSetChanged()始终调用后调用onCreate(),这使我的光标装载两次,当第一创建.我在Android 4.4.3上.

根据Api doc,

public abstract void onDataSetChanged()

在API级别11中添加

在远程适配器上触发notifyDataSetChanged()时调用.这允许RemoteViewsFactory通过更新任何内部引用来响应数据更改.注意:在此方法中可以安全地同步执行昂贵的任务.在此期间,旧数据将显示在窗口小部件中.

似乎只能通过自己手动调用notifyDataSetChanged()来触发此调用.

但是根据Appwidget指南,

在onCreate()中,您可以为数据源设置任何连接/光标.繁重的工作,例如下载或创建内容等,应该推迟到onDataSetChanged()或getViewAt().在此呼叫中花费超过20秒将导致ANR.

通过说延期,是否暗示onDataSetChanged()将被称为后onCreate()?我不太确定......但它确实说我应该把光标放在里面onCreate().

我自己尝试调查此问题,但是可用的源代码正在使用,Binder因此远程调用者仍然未知,因此我无法检查其来源.

你有什么主意吗?

android remoteview android-appwidget

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

如何使RadioButton看起来像JavaFX中的常规Button

我正在实现一个类似工具箱的窗格,因此用户一次只能选择一个工具,然后我切换ButtonRadioButton它的行为.

但我发现它RadioButton使用自己的皮肤带点,但我仍然希望它像正常一样显示Button.我是JavaFX和FXML的初学者,所以任何人都知道如何实现这一目标?

java javafx javafx-2 javafx-8

5
推荐指数
1
解决办法
2556
查看次数

为什么数组的equals()没有像Arrays.equals()那样被覆盖

我知道数组equals()是有效的,Object.equals()而且实际上没有人应该使用它(只是使用==并避免使用NPE),相反,Arrays.equals()如果他们没有比较身份,他们应该使用它.

那么为什么Java只是将equals()数组的方法重写为Arrays.equals()?这样可以为初学者节省很多意外行为,并且可以更容易地使用数组(例如在a中Set),而我无法想到任何缺点.或者是否有任何理由阻止语言这样做?

java arrays language-design

5
推荐指数
0
解决办法
69
查看次数

菜单android上的复选框项状态

如何设置菜单中复选框项目部分的初始值?当我启动一个Activity时,我想设置一个保存在共享首选项中的布尔值.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".LoginActivity">
    <item
        android:id="@+id/checkbox"
        android:title="@string/checkbox"
        android:orderInCategory="10"
        android:showAsAction="never"
        android:visible="true"
        android:checkable="true"
        android:checked="true"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.login, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.checkbox){

        if(item.isChecked()){
            item.setChecked(false);
        }else{
            item.setChecked(true);
        }
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean(PrefsConsts.CHECKBOX,item.isChecked());
        editor.commit();

    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我总能知道什么是价值,但我不知道如何设置新的价值.

android android-checkbox

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

交叉文件#if和#endif - 它应该合法吗?

根据C11标准,

表单的预处理指令

#include"q-char-sequence"换行符

导致由"分隔符"之间的指定序列标识的源文件的全部内容替换该指令.

所以,如果我有一个头文件test.h包含:

#endif
Run Code Online (Sandbox Code Playgroud)

一个源文件test.c包含:

#if 1
#include "test.h"
Run Code Online (Sandbox Code Playgroud)

是否应该根据标准通过更换现有内容来通过预处理阶段test.h

但我不能这样做clang,其中说:

In file included from test.c:2:
./test.h:1:2: error: #endif without #if
#endif
 ^
test.c:1:2: error: unterminated conditional directive
#if 1
 ^
2 errors generated.
Run Code Online (Sandbox Code Playgroud)

那么标准指定的行为是什么?

c c++ c-preprocessor preprocessor-directive c11

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