Проверено управляемое действие, не сфокусированное в GuidedStepFragment - PullRequest
0 голосов
/ 13 октября 2018

Я реализовал GuidedStepFragment в своем приложении для Android TV.Существует один шаг (фрагмент), который позволяет пользователю изменить настройку отображения времени.(12-часовой или 24-часовой формат)

Я получаю ранее сохраненное предпочтение от SharedPreferences и устанавливаю проверенное управляемое действие, однако, первое управляемое действие фокусируется, а не проверяется.(См. Снимок экрана ниже.) Что мне нужно сделать, чтобы сфокусировать проверенное управляемое действие?

Вот код, который я использую:

public class GuidedStepActivity extends Activity {

private static final int ENABLED_12_HOUR_CLOCK = 0;
private static final int DISABLED_12_HOUR_CLOCK = 1;
private static final int DONE = 99;
private static final int OPTION_CHECK_SET_ID = 10;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (null == savedInstanceState) {
        GuidedStepFragment.addAsRoot(this, new TimeFormatSelectionFragment(), android.R.id.content);
    }
}


private static void addCheckedAction(List<GuidedAction> actions, long id,
                                     String title, String desc, boolean checked) {
    GuidedAction guidedAction = new GuidedAction.Builder()
            .id(id)
            .title(title)
            .description(desc)
            .checkSetId(OPTION_CHECK_SET_ID)
            .build();
    guidedAction.setChecked(checked);
    actions.add(guidedAction);
}

private static void addAction(List<GuidedAction> actions, long id, String title, String desc) {
    actions.add(new GuidedAction.Builder()
            .id(id)
            .title(title)
            .description(desc)
            .build());
}


public static class TimeFormatSelectionFragment extends GuidedStepFragment {

    private UserData mUserData;

    @Override
    public void onViewCreated(View v, Bundle savedInstanceState) {
        super.onViewCreated(v, savedInstanceState);

        mUserData = UserData.getInstance(getContext());

        updateActions();
    }

    @Override
    @NonNull
    public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
        String title = getString(R.string.guided_step_12_hour_clock_title);
        String description = getString(R.string.guided_step_12_hour_clock_description);

        return new GuidanceStylist.Guidance(title, description, "", null);
    }

    @Override
    public int onProvideTheme() {
        return R.style.Theme_Example_Leanback_GuidedStep_First;
    }

    @Override
    public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
        if (getActivity() instanceof GuidedStepActivity) {
            addCheckedAction(actions, ENABLED_12_HOUR_CLOCK,
                    getResources().getString(R.string.guided_step_12_hour_clock_enabled),
                    getResources().getString(R.string.guided_step_12_hour_clock_enabled_description),
                    false);
            addCheckedAction(actions, DISABLED_12_HOUR_CLOCK,
                    getResources().getString(R.string.guided_step_12_hour_clock_disabled),
                    getResources().getString(R.string.guided_step_12_hour_clock_disabled_description),
                    false);

            addAction(actions, DONE,"Done", "");
        }
    }

    @Override
    public void onGuidedActionClicked(GuidedAction action) {
        if (action.getId() == ENABLED_12_HOUR_CLOCK) {
            mUserData.setDisplayTimeIn12HourClock(true);
        }
        else if (action.getId() == DISABLED_12_HOUR_CLOCK) {
            mUserData.setDisplayTimeIn12HourClock(false);
        }
        else {
            getActivity().finish();
        }
    }

    private void updateActions() {
        boolean isDisplayTimeIn12HourClock = mUserData.isDisplayTimeIn12HourClock();

        GuidedAction action;
        if (isDisplayTimeIn12HourClock) {
            action = findActionById(ENABLED_12_HOUR_CLOCK);
        }
        else {
            action = findActionById(DISABLED_12_HOUR_CLOCK);
        }
        action.setChecked(true);
    }
}
}

enter image description here

...