我正在尝试实现一个漂亮的,可重用的片段,我很难选择设置交互回调的模式.我当然熟悉这些文档,但我对其中描述的方法有一些疑问.
假设我们有一个带回调接口的Fragment:
public class MyFragment extends Fragment {
private Callbacks mCallbacks;
public static interface Callbacks { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我遇到了两种为Fragments设置回调的方法.
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 永远不会为空(只要片段还活着)简单的听众模式.
public void setCallbacks(Callbacks callbacks) {
mCallbacks = callbacks;
}
Run Code Online (Sandbox Code Playgroud)
我有一个对象声明( object A : BaseClass) 并且我想创建另一个B继承自A隐式类的对象声明。BaseClass是一个类而不是一个接口。在 Kotlin 中可能吗?
我在布局中定义了一个底栏:
<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())提供的图标,那将是完美的.
有没有办法在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)
我知道这可以通过编程方式轻松完成,但是在为同一颜色定义多个透明度值时,以声明方式执行它会更清晰,更易读.
我已经实现了我的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 Studio 调试器调试应用程序。我进入了一些系统类并得到了常见的“源代码与字节码不匹配”消息。还出现了一个“可供课堂使用的替代来源……”栏。有一个微调器允许我选择与调试器一起使用的源。
我唯一的选择是在 Android API 25 和 26 平台之间,尽管我也下载并安装了其他 API 级别的源代码。我想预览 API 22 的源代码。
Android API 25 和 26 平台是项目侧栏中“外部库”部分下列出的唯一 Android 源。
我正在运行 Android Studio 3.0.1。