我的应用只包含一个名为“关于”的设置组。
我使用android工作室生成SettingsActivity(新的>活动>设置活动)并修改res / xml中的文件以将3个默认组减少为1。
我遇到的问题是我需要点击设置两次才能访问我的设置。
如何点击“设置”时显示“关于”组? 理想情况下,解决方案不应使用已弃用的方法调用。
以下是我从自动生成的文件中修改的ActivitySettings.java代码。
public class SettingsActivity extends AppCompatPreferenceActivity {
private static final List<String> fragments = new ArrayList<>();
/**
* Helper method to determine if the device has an extra-large screen. For
* example, 10" tablets are extra-large.
*/
private static boolean isXLargeTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupActionBar();
}
/**
* Set up the {@link android.app.ActionBar}, if the API is available.
*/
private void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// Show the Up button in the action bar.
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
if (!super.onMenuItemSelected(featureId, item)) {
NavUtils.navigateUpFromSameTask(this);
}
return true;
}
return super.onMenuItemSelected(featureId, item);
}
/**
* {@inheritDoc}
*/
@Override
public boolean onIsMultiPane() {
return isXLargeTablet(this);
}
/**
* {@inheritDoc}
*/
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
fragments.clear();
Queryable.from(target).forEachR(header ->
fragments.add(header.fragment));
}
/**
* This method stops fragment injection in malicious applications.
* Make sure to deny any unknown fragments here.
*/
protected boolean isValidFragment(String fragmentName) {
return PreferenceFragment.class.getName().equals(fragmentName)
|| fragments.contains(fragmentName);
}
/**
* This fragment shows data and sync preferences only. It is used when the
* activity is showing a two-pane settings UI.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class AboutPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_about);
findPreference("pref_about_version").setSummary(BuildConfig.VERSION_NAME);
setGameRules((RulesDialogPreference) findPreference("pref_game_rules"));
}
}
private static void setGameRules(RulesDialogPreference gameRules) {
gameRules.setList( );
}
}
答案 0 :(得分:4)
如果您已阅读起始行中提供的评论,
- 提供一组应用程序设置的{@link PreferenceActivity}。上
- 手机设备,设置显示为单个列表。在平板电脑上,
- 设置按类别拆分,类别标题显示在
的左侧- 设置列表。
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
}
上面的方法是添加那些在平板电脑中显示为左侧列表项的标题。
要直接显示首选项屏幕,您可以使用下面的代码,它从android studio中生成的示例代码进行修改,它将解决您的目的。
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new GeneralPreferenceFragment())
.commit();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
}
}
}
如需更多参考,请浏览Preference Activity and Fragments