已检查的指导动作未集中在GuidedStepFragment中

时间:2018-10-12 21:54:09

标签: android-tv leanback amazon-fire-tv

我在Android TV应用中实现了GuidedStepFragment。有一个单一步骤(片段),使用户可以更改时间显示设置。 (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

0 个答案:

没有答案