0

SharedPreferences からリスト ビューのオプションの 1 つをプログラムで削除しようとしています。以下に簡略化したコードを含めました。

同様の質問をたくさん読みましたが、うまくいかないようです。私は重要な概念を誤解しているに違いありません。助けてください。

clear() と apply() を使用してみました。また、すべてを削除する代わりに a 行を追加しようとしましたが、成功しませんでした。

どのキーを使用するかという概念を誤解している可能性があると思いますが、代替キーを試してみましたが、何も機能していないようです.

私の好み.java

package il.preferences;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Preferences extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
        SharedPreferences preferences = getSharedPreferences(
                "myKey", MODE_PRIVATE);
        preferences.edit().remove("1").commit();
    }
}

私の好み.xml

 <?xml version="1.0" encoding="utf-8" standalone="no"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="Cat X" >
        <ListPreference
            android:defaultValue="1"
            android:entries="@array/myOptions"
            android:entryValues="@array/myValues"
            android:key="myKey"
            android:summary="Select an item"
            android:title="Choose" />
    </PreferenceCategory>

</PreferenceScreen>

私のstrings.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<resources>
    <string-array name="myOptions">
        <item>A</item>
        <item>B</item>
        <item>C</item>
    </string-array>
    <string-array name="myValues">
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>
</resources>
4

1 に答える 1

0

私の問題は、優先フレームワークを間違って概念化したことでした。間違ったターンを共有して、他の迷子になった初心者を助けます.

上記のpreferences.xmlで定義したPreferenceScreenと、DDMSパースペクティブmy.package.name_preferences.xmlで確認できる設定が保存されているファイルを混同していました-ファイルマネージャーを使用-データ-データ-プロジェクト名-shared_prefsこのファイルを見つけてプルするには

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="myKey">1</string>
</map>

次に、誤って設定エディタを使用して PreferenceScreen を変更しようとしました

SharedPreferences preferences = getSharedPreferences("myKey", MODE_PRIVATE);
preferences.edit().remove("1").commit();

最終的に、最終的に理解するために、必要なすべての順列を持つ Google API com.example.android.apis.ApiDemos com/example/android/apis/preference でサンプル コードを見つけました。

私の最終的な解決策は、 setPreferenceScreen(createPreferenceHierarchy()); の組み合わせを使用することでした。addPreferencesFromResource(R.xml.preferences);

私の静的な好みと動的な好みの両方を組み込むために。ただし、動的設定のコードを以下に追加します (Google に感謝します)。オンラインでチュートリアルを検索したり、書籍を使用したりするよりも、Google API を参照することをお勧めします。

import java.util.List;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;

public class SetPreferenceActivityGB extends PreferenceActivity {
    private static final String LENGTH_DEFAULT = "4";
    private static final String LEVEL_DEFAULT = "level1";

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

        setPreferenceScreen(createPreferenceHierarchy());
        addPreferencesFromResource(R.xml.preferences);
    }


    private PreferenceScreen createPreferenceHierarchy() {
        PreferenceScreen root = getPreferenceManager().createPreferenceScreen(
                this);


        // Dialog based preferences
        PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
        root.addPreference(dialogBasedPrefCat);

        // List preference
        ListPreference listPref = new ListPreference(this);

// This is where I get my dynamic list of levels and use it as a character sequence to
// To make my list view dynamic.     
        List<String> myList ; 

        myList = Playsound.getAvailableLevels(); // Function which is Dynamic
        CharSequence[] cs = myList.toArray(new CharSequence[al.size()]);

        listPref.setEntries(cs);
        listPref.setEntryValues(cs);
        // listPref.setEntries(R.array.levels);
        // listPref.setEntryValues(R.array.levelsValues);
        listPref.setDialogTitle(R.string.level_title);
        listPref.setKey("level");
        listPref.setTitle(R.string.level_title);
        listPref.setValueIndex(0);
        listPref.setDefaultValue(LEVEL_DEFAULT);
        listPref.setSummary(R.string.level_summary);
        dialogBasedPrefCat.addPreference(listPref);

    }
}
于 2012-08-03T11:30:48.427 に答える