0

2 つの異なる PreferenceScreens でユーザーに表示したい EditTextPreference があります。2 つの異なる画面に表示されるだけで、まったく同じ設定 (android:key を「myEditText」にします) であるはずです。したがって、これは次のようになります (例を示すために完全に削除されています)。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/someCategory">
        <PreferenceScreen android:key="someScreen">
            <PreferenceScreen android:key="someSubScreen">
                <PreferenceCategory android:title="@string/someSubCategory">
                    <EditTextPreference android:key="myEditText"
                    ....
                    />
                </PreferenceCategory>
            </PreferenceScreen>
        </PreferenceScreen>
    </PreferenceCategory>
    <PreferenceCategory android:title="@string/someOtherCategory">
        <PreferenceScreen android:key="someOtherScreen">
            <PreferenceScreen android:key="someOtherSubScreen">
                <PreferenceCategory android:title="@string/someOtherSubCategory">
                    <EditTextPreference android:key="myEditText"
                    ....
                    />
                </PreferenceCategory>
            </PreferenceScreen>
        </PreferenceScreen>
    </PreferenceCategory>
</PreferenceScreen>

someScreen 経由で myEditText に移動してテキストを入力すると、戻って someOtherScreen 経由で myEditText を開いたときに表示されません。設定を閉じて、もう一度開く必要があります。次に、両方の EditText に同じテキストが表示されます。

では、異なる画面でまったく同じ設定を行うにはどうすればよいでしょうか?

/編集:

とにかく、なぜ私はそれをしたいのですか?最初の PreferenceScreen は URL 短縮に関するものです。短縮のオプションを設定したり、使用するサービスを選択/並べ替えたり、bit.ly、goo.gl などのユーザー資格情報を入力したりできます。

2 番目の画面はファイル アップロード サービス用で、同じことができます (ファイル アップロードのオプションの設定、サービスの選択/並べ替え、アップロード サービスのユーザー資格情報の入力)。

現在、ファイルと URL 短縮サービスの両方である CloudApp を統合しています。そのため、ユーザーは URL 短縮画面でそれを見つけることを期待しているかもしれませんが、ファイルのアップロード画面でもそれを探す可能性があります。だから、私は彼が簡単にできるようにして、両方の画面に表示するだけにしたいと思っています。それらはトップレベルの画面ではなく、かなり深い構造です。

それで、これが理にかなっているかどうかに加えて、それは可能ですか?

4

1 に答える 1

1

さて、これが私が今していることです。それはきれいではありませんが、それは仕事をし、現時点では私はそれに満足しています:

同じキーを使用する代わりに、異なる EditTextPreferences (myEditText と myEditText2 など) を使用します。設定コードで OnPreferenceChangeListener を作成します。

    final OnPreferenceChangeListener myEditTextChangeListener = new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            String newEntry = (String)newValue;
            myEditText.setText(newEntry);
            myEditText2.setText(newEntry);
            return false;
        }
    }; 

Listener を両方の EditTextPreferences に割り当てます。

myEditText.setOnPreferenceChangeListener(myEditTextChangeListener);
myEditText2.setOnPreferenceChangeListener(myEditTextChangeListener);

OnSharedPreferenceChangeListener が登録されるメイン アクティビティでは、最初の EditText への変更を監視するだけで済みます。実際、2 番目の EditText は常に最初の EditText と同じエントリを持つため、完全に無視します。

于 2011-02-25T15:07:46.427 に答える