2

現在、PreferenceActivityとPreferenceFragmentがあります。アクティビティにはonBuildHeadersが定義されており、preference-headersのルートオブジェクトと、ヘッダーであるその子がいくつかあるXMLファイルが読み込まれます。各ヘッダーは、PreferenceFragmentと、画面、カテゴリ、および設定を含むXMLファイルを指します。

問題は、このシステムの深さが2層しかないことです。左側のパネルにヘッダーがあり、そのヘッダーのすべてが右側のパネルの1つのリストにあります。一部のヘッダーでは、オプションが1ダースほどしかないため、問題なく機能します。他のヘッダーについては、スクロールとスキャンの両方、およびデバイスのロードの両方で、かなり圧倒的な100以上の設定があります(タップして開くと開くまでの間に顕著な遅延があります)。

複数の層を持つことができる方法はありますか?左側では、ユーザーがヘッダーを介して、設定が実際に保存されているレベルに到達するまで、ヘッダーを介して「ドリルダウン」(主にiOSで聞いた用語、IDKでよくある用語)できると考えています。右側のパネルにその表示がありますか?

私自身の完全にカスタムなシステムを書くことは実行可能であるように思われますが、時間がかかります。誰かが私のために3または4層のドリルダウン設定を実装するいくつかの組み込みAPIを知っていることを望んでいます。

そして、誰かが尋ねる前に、はい、私はこれほど多くの好み(〜500)を持っている必要があります。私は好みのメニューを作るように指示され、アイテムのリストを与えられました(これは3つまたは4つの層にかなり簡単に分類できます)。

4

1 に答える 1

1

これは実際にはかなり簡単でした。ルートヘッダーが開くXMLファイルで、Preferenceアイテムを追加し、android:fragmentをPreferencesFragmentクラスに設定しました。システム全体がどのように機能するかを明確にするために、私は次のことを行っています。

public class MyPreferencesActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> targer) {
        loadHeadersFromResource(R.xml.preference_headers, target);
    }

その場合、preference_headersは次のようになります。

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
    <header android:fragment="com.my.androidapp.MyPreferencesFragment" title="General Category >
        <extra android:name="resource" android:value="preferences_general" />
    </header>
    <header... one per category, different titles and extra values for each.
</preference-headers>

MyPreferenceFragmentは次のようになります。

public class MyPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String name = getArguments().getString("resource");
        int res = getActivity().getResources().getIdentifier(name, "xml", getActivity().getPackageName());
        addPreferencesFromResource(res);

そして最後に、私の設定ファイルは次のようになります。

<PreferenceScreen blah...>
    <Preference android:fragment="com.my.androidapp.MyPreferenceFragment" android:title="Drill Down!">
        <extra android:name="resource" android:value="preferences_subgeneral" />
    </Preference>
    <Preference... whatever I want... I can use ordinary preferences or any number of items that can be selected to drill down further still.
</PreferenceScreen>

これが他の人々、特に大量の好みを持つ他の人々に役立つことを願っています。

于 2012-07-30T20:58:49.880 に答える