Переключатель работает только один раз - PullRequest
0 голосов
/ 20 мая 2018

Несмотря на то, что я включил свой OnCheckedChangeListener в onCreateOptionsMenu и onPrepareOptionsMenu, коммутатор работает только один раз, если я деактивирую его из своего сервиса.После этого ничего не произойдет, если я включу его снова.

В MainActivity:

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

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    mMenu = menu;
    switchlistener(mMenu);
    return super.onPrepareOptionsMenu(menu);
}

метод:

private void switchlistener(Menu mMenu) {
    MenuItem appBarSwitch = mMenu.findItem(R.id.app_bar_switch);
    appBarSwitch.setActionView(R.layout.switch_item);
    mSwitch = mMenu.findItem(R.id.app_bar_switch).getActionView().findViewById(R.id.action_switch);
    mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            if (isChecked) {
                Toast.makeText(MainActivity.this, "Fired up!", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getApplicationContext(), BroadcastReceiverService.class);
                startService(intent);
            } else {
                Intent intent = new Intent(getApplicationContext(), BroadcastReceiverService.class);
                stopService(intent);
            }
        }
    });
}

В классе обслуживания:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.getAction() != null && intent.getAction().equals("SWITCH OFF")) {
        stopForeground(true);
        stopSelf();

        Menu menu = MainActivity.getThis().getMenu();
        MenuItem appBarSwitch = menu.findItem(R.id.app_bar_switch);
        appBarSwitch.setActionView(R.layout.switch_item);
        appBarSwitch.setChecked(false);

    } else {
        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
    }
    return START_NOT_STICKY;

}

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 20 мая 2018

Для записи ответ заключался в том, чтобы поместить мой метод switchListener в OnStartCommand.Таким образом, его снова вызывают.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.getAction() != null && intent.getAction().equals("SWITCH OFF")) {
        stopForeground(true);
        stopSelf();

        Menu menu = MainActivity.getThis().getMenu();
        MenuItem appBarSwitch = menu.findItem(R.id.app_bar_switch);
        appBarSwitch.setActionView(R.layout.switch_item);
        appBarSwitch.setChecked(false);
        Switch mSwitch = menu.findItem(R.id.app_bar_switch).getActionView().findViewById(R.id.action_switch);
        mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if (isChecked) {
                    Intent intent = new Intent(getApplicationContext(), BroadcastReceiverService.class);
                    startService(intent);
                } else {
                    Intent intent = new Intent(getApplicationContext(), BroadcastReceiverService.class);
                    stopService(intent);
                }
            }
        });


    } else {
        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
    }
    return START_NOT_STICKY;

}
...