0

重複の可能性:
関連する値がわかっている場合、SharedPreferences からキーを取得できますか?

以下のコードは、SharedPreferences ファイルから AlertDialog を設定し、値でアルファベット順に並べ替えるために使用します。

ユーザーが AlertDialog リストのオプションをクリックすると、それが起動します

 setServer(prefsCharSequence[i]);

prefsCharSequence[i] は、選択されたオプションの値を返します。

その値に「キー」を使用したい。現在のコードを指定してこれを取得するにはどうすればよいですか? これで、単純な「prefsCharSequence[i].getKey()」または同様のものになることを望んでいた値がわかりました。

public void openServerDialog() {


        final SharedPreferences myPrefs = this.getSharedPreferences("FileName", MODE_PRIVATE);
        TreeMap<String, ?> keys = new TreeMap<String, Object>(myPrefs.getAll());
        for (Map.Entry<String, ?> entry : keys.entrySet()) {
            Log.i("map values", entry.getKey());
            //some code
        }


      List<Pair<Object, String>> sortedByValue = new LinkedList<Pair<Object,String>>();
        for (Map.Entry<String, ?> entry : keys.entrySet()) {
            Pair<Object, String> e = new Pair<Object, String>(entry.getValue(), entry.getKey());
            sortedByValue.add(e);
        }

     // Pair doesn't have a comparator, so you're going to need to write one.
        Collections.sort(sortedByValue, new Comparator<Pair<Object, String>>() {
            public int compare(Pair<Object, String> lhs, Pair<Object, String> rhs) {

                String sls = String.valueOf(lhs.first);
                String srs = String.valueOf(rhs.first);
                int res = sls.compareTo(srs);
                // Sort on value first, key second
                return res == 0 ? lhs.second.compareTo(rhs.second) : res;
            }
        });

        for (Pair<Object, String> pair : sortedByValue) {
            Log.i("map values", pair.first + "/" + pair.second);
        }


      Collection<?> stringArrayList = keys.values();
      final CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]);

        new AlertDialog.Builder(this)   
        .setTitle(R.string.server_title)
        .setItems(prefsCharSequence, 
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialoginterface, int i) {

                setServer(prefsCharSequence[i]);   

            }
        })
        .show();
    }

私はこれを繰り返して、私が持っている値のキーを取得しようとしていますが、これまでのところ私はこれを持っていますが、次にどこに行くべきかわかりません:

CharSequence server = i;
        SharedPreferences myPrefs = this.getSharedPreferences("FileName", MODE_PRIVATE);
        Map<String, ?> items = myPrefs.getAll();
        for(String s : items.keySet()){


        }

i は、必要なキーの値と同じです。この見出しは正しい方向ですか?

4

2 に答える 2

0

私があなたの質問を正しく理解している場合、prefsCharSequenceはSharedPreferencesオブジェクトからの値の配列です。その場合は、設定からキーの配列を保持しないのはなぜですか?値はprefsCharSequence[i]になり、キーはprefsCharSequenceKeys[i]のようになります。

于 2012-10-09T19:39:14.603 に答える
0

ティムが提案したように、クラスのgetAll()関数を参照できます。SharedPreferences

これによりMap<String,?>オブジェクトが返されます。クラスのkeySet()関数を使用してキーセットを取得し、 Java のループMapを繰り返し使用できます。foreach

お役に立てれば。

于 2012-10-09T20:34:43.390 に答える