android布局查看工具栏,Android工具栏/ ActionBar设置查看初始状态(示例代码)

我的应用程序有一个工具栏作为操作栏,其中的菜单在onCreateOptionsMenu()中膨胀。其中一个菜单项显示了我们使用的服务状态。我可以毫无问题地更改该视图的文本和颜色,但我无法可靠地设置初始状态,因为当我尝试设置初始状态时,findViewById(R.id.menu_listening_item)返回null。

这是我设置视图状态的代码:

final TextView statusView = findViewById(R.id.menu_item);

if(statusView == null) {

initialMode = newMode;

return;

}

switch(newMode) {

case SpeechDetector.FIRST_MODE:

statusView.post(() -> {

statusView.setText(R.string.first_mode);

statusView.setTextColor(Color.WHITE);

statusView.setBackgroundColor(Color.BLUE);

});

break;

....

由于这最初是由服务代码调用的,所以如果视图为null,我将存储该值。然后,当视图不为null时,我将再次调用此代码,但如何?

我已经尝试在onResume(),onCreateOptionsMenu()和onPrepareOptionsMenu()中再次调用它,但是当视图存在时,不会调用它们。我想避免旋转循环,原因很明显。

视图存在后何时是正确的运行时间?

答案

由于Android没有任何好的方法可以找到我能找到的,我通过创建自定义按钮/视图来解决这个问题。该视图在创建时订阅该服务,然后在删除时取消订阅。

在我的menu.xml中:

android:id="@+id/menu_custom_item"

app:showAsAction="always|withText"

android:title="@string/custom"

app:actionLayout="@layout/custom_button">

这是由我的菜单工具栏提取的。 custom_button布局是:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="wrap_content"

android:layout_width="wrap_content" />

然后CustomButton的构造函数订阅该服务,该服务将告知它何时更新。最后(并且很难找到),我需要在CustomButton消失时取消订阅:

@Override

protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

// Don't leak memory, unsubscribe from the Service here

}

我省略了创建自定义视图对象的几个步骤,但很容易找到它们,每个人的情况都有所不同。我希望这有助于其他人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值