我在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);
}
}
}