如何仅使用一个组显示Android设置?

时间:2015-12-10 08:00:43

标签: android android-settings

我的应用只包含一个名为“关于”的设置组。

我使用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( );
    }
} 

1 个答案:

答案 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