61

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

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

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

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

私は明確だったと思います。要するにここに私の質問があります:

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

もう少し見回した後、私は古い方法が簡単な方法で行ったことをやろうとしているように見えます。非推奨の関数を使用せずにこれを実行しようとしています。

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

4

2 に答える 2

90

PreferenceFragment新しい好ましい方法は、アクティビティのメイン コンテンツとしてシングルを表示することです。である必要はありませんPreferenceActivity。API のデモ サンプルを見る

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

}  
于 2012-10-09T19:16:32.087 に答える
25

この質問に一致する答えを探していました。最終的に、私は他のいくつかの情報源からそれを解決しました。まだ答えが欲しいかもしれない人のために、これが私のために働いたものです. (注 - このプロジェクトでは、最小 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() を実行します。

それでおしまい。

于 2012-09-14T22:59:11.417 に答える