web-dev-qa-db-ja.com

単一ページのPreferenceActivity w / no headers / fragments?

私は非常に簡単だと思うことを達成しようとしていますが、PreferenceActivityクラスとxml preference-headerタグを使用してそれを達成する方法に困惑しています。

ユーザーがアプリ設定アイコンをタップすると、チェックボックスとリストの小さなリストが表示されます。優先フラグメントは1つしかありません。ここまでで、PreferenceActivity xmlファイル(preferences.xml、および設定フラグメントxml)を設定して、設定フラグメントの単一のヘッダーを表示できます。ユーザーがそのヘッダーを選択すると、設定画面は希望どおりになりますが、最初のヘッダー画面の表示をスキップする方法がわかりません。

設定/設定アイコンをタップし、実際の設定/設定を取得するためにタップされる単一のヘッダーを表示する必要があるのは無駄のようです。

あなたの好みを分類したい場合、これがどのように非常に役立つか理解していますが、簡単なことのために、これはオーバーヘッドを追加し、かなり不格好に見えます。

明確になったことを願っています。簡単に言えば、私の質問です:

PreferenceActivityクラスとpreference-headerタグを使用して、ヘッダーのないオプションの単一画面を単に表示する新しい好ましい方法は何ですか?

さらに調べてみると、古い方法がやったことを簡単にやろうとしているようです。非推奨の関数を使用せずにこれを実行しようとしています。

よろしくお願いします、B。

61
Billbris

新しい推奨方法は、単一のPreferenceFragmentをアクティビティのメインコンテンツとして表示することです。 PreferenceActivityである必要はありません。 APIsデモサンプルをご覧ください

public class FragmentPreferences extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction().replace(Android.R.id.content,
                new PrefsFragment()).commit();
    }


    public static class PrefsFragment extends PreferenceFragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.preferences);
        }
    }

}  
89
AJAY PRAKASH

この質問に合った答えを探していました。最終的に、私はいくつかの他のソースからそれを解決しました。まだ答えが欲しい人のために、ここで私のために働いたものがあります。 (注-このプロジェクトでは、最小SDKとターゲットSDKの両方が15に設定されています。)

  1. PreferenceHeadersをダンプします。必要ありません。
  2. 単一のページ設定で設定画面を作成します。
  3. 設定アクティビティクラスを作成します(下のSettingsActivity)。
  4. PreferenceFragment(以下のLocationFragment)を拡張するインラインクラスを作成します。
  5. マニフェストでクラスを定義します。
  6. タスクを開始します-以下のメニューコードを参照してください。

単一の設定画面を表示する設定クラス。

public class SettingsActivity extends PreferenceActivity {

    private final static String TAG = "SettingsAcitivity";

    public SettingsActivity() {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyLog.d(TAG, "onCreate");
        getFragmentManager().beginTransaction()
                .replace(Android.R.id.content, new LocationFragment()).commit();
    }

    public class LocationFragment extends PreferenceFragment {

        private final static String TAG = "LocationFragment";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MyLog.d(TAG, "onCreate");
            addPreferencesFromResource(R.xml.locationsettings);
        }
    }
}

設定を表示するコード:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    MyLog.d(TAG, "onOptionsItemSelected");
    switch (item.getItemId()) {
    case R.id.menu_main_help:
        break;
    case R.id.menu_main_about:
        break;
    case R.id.menu_main_settings:
        MyLog.d(TAG, "Settings");
        Intent settingsIntent = new Intent(this, SettingsActivity.class);
        startActivity(settingsIntent);
        break;
    }
    return true;
}

Backキーは、SettingsActivityを終了します。組み込みの設定ルーチンは、変更を保存します。私が持っているonResume関数は、呼び出しアクティビティ(この場合はMainActivity)によって使用される変更された設定を更新するgetSettings()を実行します。

それでおしまい。

25
Howard Hodson