【问题标题】:How to change src in Floating Action Button from Service.class?如何从 Service.class 更改浮动操作按钮中的 src?
【发布时间】:2017-04-03 07:16:53
【问题描述】:

我有方法,它通过按下通知中的按钮来完成操作。

private void handleIncomingActions(Intent playbackAction) {
        if (playbackAction == null || playbackAction.getAction() == null) {
            return;
        }

        String actionString = playbackAction.getAction();

        if (actionString.equalsIgnoreCase(ACTION_PLAY)) {
            if (mediaPlayer != null) {
                playMedia();
            }
        }
        if (actionString.equalsIgnoreCase(ACTION_PAUSE)) {
            if (mediaPlayer != null) {
                pauseMedia();

                //HERE NEED TO CHANGE SRC
            }
        }
        if (actionString.equalsIgnoreCase(ACTION_CLOSE)) {
            if (mediaPlayer != null) {
                stopService(new Intent(this, MediaService.class));
                getApplicationContext().unbindService(PlayerActivity.serviceConnection);
                PlayerActivity.serviceBound = false;

                //HERE NEED TO CHANGE SRC

            }
        }
    }

在两种情况下,我需要在我的 PlayerActivity 类中从 Service.class 更改 FAB 的图标。 如何在不使用“静态”且不使用单例的情况下访问 FAB?

【问题讨论】:

  • 使用广播接收类
  • @quicklearner 在此之前,我只是通过Broadcast做的,但是如果FAB不是静态的,我仍然不明白如何访问。

标签: android android-activity service floating-action-button


【解决方案1】:

在役:

public static final String SERVICE_REQUEST = "com.example.app.service.SERVICE_REQUEST";
// ...
Intent data = new Intent(SERVICE_REQUEST);
LocalBroadcastManager.getInstance(ServiceClass.this).sendBroadcast(data);

活动中:

// in onCreate for example
reseiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // update your fab here
            }
}
// ...
@Override
public void onStop() {
       LocalBroadcastManager.getInstance(this).unregisterReceiver(reseiver);
       super.onStop();
}

@Override
public void onStart() {
        super.onStart();
        LocalBroadcastManager.getInstance(this).registerReceiver(reseiver, new IntentFilter(ServiceClass.SERVICE_REQUEST));
}

【讨论】:

  • 这就是我需要的......谢谢!
【解决方案2】:

试试这个:

将此添加到PlayerActivity

public void changeFloatingActionButtonIcon(int fabIcon) {

     fab.setImageResource(fabIcon);
};

将此添加到 Services.class:

((PlayerActivity) getActivity()).changeFloatingActionButtonIcon(R.drawable.icon);

【讨论】:

  • 用上下文替换它
猜你喜欢
  • 2017-06-13
  • 2018-12-11
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2015-08-07
  • 2015-09-07
  • 1970-01-01
相关资源
最近更新 更多