Подтвердить что ты не робот

Пропускать заголовки в PreferenceActivity, когда есть только один заголовок

Я добавил заголовки предпочтений в свое приложение, чтобы экран предпочтений не выглядел сломанным для ICS сотовых и планшетов. Тем не менее, на данный момент у меня есть только один заголовок, поэтому вам нужно щелкнуть по экрану заголовка только с одной записью на устройствах с размером телефона. Есть ли простой способ сказать андроиду пропустить экран заголовка, когда есть только один заголовок, но показывать его на больших экранах?

Похоже, что приложение "Контакты для контактов" делает это успешно, но я просмотрел его источник и не могу понять, как он это делает.

4b9b3361

Ответ 1

Вы можете пропустить заголовки, установив по умолчанию один из ваших PreferenceFragments.

Когда вы посмотрите на источник PreferenceActivity.java, вы найдете эти две дополнительные функции:

/**
 * When starting this activity, the invoking Intent can contain this extra
 * string to specify which fragment should be initially displayed.
 */
public static final String EXTRA_SHOW_FRAGMENT = ":android:show_fragment";

/**
 * When starting this activity, the invoking Intent can contain this extra
 * boolean that the header list should not be displayed.  This is most often
 * used in conjunction with {@link #EXTRA_SHOW_FRAGMENT} to launch
 * the activity to display a specific fragment that the user has navigated
 * to.
 */
public static final String EXTRA_NO_HEADERS = ":android:no_headers";

Теперь просто добавьте эти два дополнения в намерение, которое вызывает вашу PrefenceActivity, и укажите PreferenceFragment, который должен отображаться по умолчанию следующим образом:

Intent intent = new Intent( this, Preferences.class );
intent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT, PreferencesFragment.class.getName() );
intent.putExtra( PreferenceActivity.EXTRA_NO_HEADERS, true );

Ответ 2

Используя EXTRA_SHOW_FRAGMENT, упомянутый jenzz, вы можете манипулировать Интерактивным действием, например:

@Override
protected void onCreate(Bundle savedInstanceState) {
  // By default, show MainPreferences
  Intent intent = getIntent();
  if (intent.getStringArrayExtra(EXTRA_SHOW_FRAGMENT) == null) {
    getIntent().putExtra(EXTRA_SHOW_FRAGMENT, MainPreferences.class.getName());
  }

  super.onCreate(savedInstanceState);
}

Ответ 3

Я не знаю, можете ли вы специально пропустить заголовок, но это то, что я сделал.

Я создал 2 класса, один для Экстра большого размера экрана и один для остальных. EditPreferences.class загружает мои обычные preferences.xml, а EditPreferencesXLarge.class загружает заголовки предпочтений xml.

public boolean onOptionsItemSelected(MenuItem item) {
    final int SCREENLAYOUT_SIZE_XLARGE = 4;
    final int HONEYCOMB = 11;
    int screenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

    switch(item.getItemId())
    {
        case R.id.item_prefs:
            if (Build.VERSION.SDK_INT < HONEYCOMB) {
                startActivity(new Intent(this, EditPreferences.class));
            }
            else if (screenSize < SCREENLAYOUT_SIZE_XLARGE) {
                startActivity(new Intent(this, EditPreferences.class));
            }
            else {
                startActivity(new Intent(this, EditPreferencesXLarge.class));
            }

            return true;
    }

    return (super.onOptionsItemSelected(item));
}

Ответ 4

Вы можете удалить этот код в своей деятельности.

     public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.pref_general, target);
    }

И замените фрагмент:

public class SettingsActivity extends AppCompatPreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           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);

        }

    }

}