小编Spa*_*son的帖子

片段交互回调:onAttach()vs setter

我正在尝试实现一个漂亮的,可重用的片段,我很难选择设置交互回调的模式.我当然熟悉这些文档,但我对其中描述的方法有一些疑问.

假设我们有一个带回调接口的Fragment:

public class MyFragment extends Fragment {
    private Callbacks mCallbacks;
    public static interface Callbacks { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我遇到了两种为Fragments设置回调的方法.

1.投射语境 onAttach()

Android开发指南中描述的方式.

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        mCallbacks = (Callbacks) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + " must implement Callbacks");
    }
}
Run Code Online (Sandbox Code Playgroud)

优点:

  • 写的代码不多
  • mCallbacks 永远不会为空(只要片段还活着)

缺点:

  • 如果我们在Activity中使用多个片段,会变得混乱
  • 尝试使用同一Fragment类的多个实例时发生冲突
  • 使用嵌套片段时的奇怪流程

一个二传手

简单的听众模式.

public void setCallbacks(Callbacks callbacks) {
    mCallbacks = callbacks;
}
Run Code Online (Sandbox Code Playgroud)

优点

  • 可以从任何地方设置和替换回调
  • 可以使用匿名(或内部静态)回调类

缺点

  • 在调用回调方法之前需要进行nullcheck
  • 不会自动绑定Fragment娱乐(通过在Activity中设置回调轻松修复 …

java android callback listener android-fragments

8
推荐指数
1
解决办法
519
查看次数

是否可以在 Kotlin 中扩展单例(对象声明)?

我有一个对象声明( object A : BaseClass) 并且我想创建另一个B继承自A隐式类的对象声明。BaseClass是一个类而不是一个接口。在 Kotlin 中可能吗?

inheritance singleton kotlin

7
推荐指数
1
解决办法
2213
查看次数

AndroidX BottomAppBar导航图标颜色

我在布局中定义了一个底栏:

<com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bottomBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:navigationIcon="@drawable/ic_menu_black_24dp" />
Run Code Online (Sandbox Code Playgroud)

导航图标是从"new vector drawable"向导生成的通用图标.有没有办法对它应用色调?

底栏不是活动操作栏.

到目前为止我尝试过的:

  • 应用了一个覆盖textColorPrimary颜色的主题
  • 应用了一个覆盖controlColorNormal颜色的主题

如果有一个解决方案也适用于通过从XML加载菜单(使用inflateMenu()replaceMenu())提供的图标,那将是完美的.

android material-design android-bottomappbar androidx

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

引用具有修改的alpha的颜色资源

有没有办法在xml资源文件中引用具有修改后的alpha值的颜色资源?我正在寻找的是这样的:

<!-- base color -->
<color name="myColor">#19AEE0</color>
<!-- redefined color with alpha - not particularly elegant -->
<color bane="myColor2">#8019AEE0</color>
<!-- referenced color with alpha -->
<color name="myColorTransparent" alpha="0.5">@color/myColor</color>
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过编程方式轻松完成,但是在为同一颜色定义多个透明度值时,以声明方式执行它会更清晰,更易读.

xml resources android colors

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

FCM Android - 空消息ID

我已经实现了我的FirebaseMessagingService的子类,并且我成功地接收了下游消息FirebaseMessagingService.onMessageReceived(RemoteMessage).我的问题是RemoteMessage.getMessageId()总是回归null.根据我的理解,消息ID是强制性的,应由FCM服务器自动生成.实际上,调用https://fcm.googleapis.com/fcm/send 返回消息ID,我无法在应用程序端访问它.

有什么我想念的吗?

这是我的FCM消息服务类:

public class FcmMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FcmMessagingService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Logg.d(TAG, "Received message; id: " + remoteMessage.getMessageId());
        Map<String, String> data = remoteMessage.getData();
        Logg.d(TAG, "Data: " + data);

        String message = data.get("message");
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

android firebase-cloud-messaging

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

Android Studio Debugger - “替代源”弹出窗口中缺少平台

我正在使用 Android Studio 调试器调试应用程序。我进入了一些系统类并得到了常见的“源代码与字节码不匹配”消息。还出现了一个“可供课堂使用的替代来源……”栏。有一个微调器允许我选择与调试器一起使用的源。

我唯一的选择是在 Android API 25 和 26 平台之间,尽管我也下载并安装了其他 API 级别的源代码。我想预览 API 22 的源代码。

Android API 25 和 26 平台是项目侧栏中“外部库”部分下列出的唯一 Android 源。

我正在运行 Android Studio 3.0.1。

android android-studio android-studio-3.0

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