1

この素晴らしいマテリアル スピナーをオンラインで見つけて、自分のコード用に修正することができました。

<fr.ganfra.materialspinner.MaterialSpinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        app:ms_multiline="false"
        app:ms_baseColor="@color/off"
        app:ms_highlightColor="@color/off"
        app:ms_hintColor="@color/off"
        app:ms_arrowColor="@color/off"
        app:ms_arrowSize="16dp"
        app:ms_alignLabels="false"
        app:ms_floatingLabelColor="@color/off"/>

そのため、sharedPreferences を使用して、ユーザーがスピナーから選択した値を保存したので、このページが再度呼び出されたときに選択がスピナー面に表示されます。これは、onCreate に設定を追加する方法です。

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);

String[] ITEMS = {"Daily", "Weekly", "Monthly"};
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ITEMS);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner = (MaterialSpinner)findViewById(R.id.spinner);
    spinner.setAdapter(adapter);
    spinner.setError(null);

spinpref=getSharedPreferences("frequency", MODE_PRIVATE);
            spinedit=spinpref.edit();
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    if (position == 1) {
                        int freq1 = 1;
                        spinedit.putInt("freq", freq1);
                        spinedit.apply();
                    } else if (position == 2) {
                        int freq2 = 2;
                        spinedit.putInt("freq", freq2);
                        spinedit.apply();
                    } else if (position == 3) {
                        int freq3=3;
                        spinedit.putInt("freq", freq3);
                        spinedit.apply();
                    }
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    int freq0 = 0;
                    spinedit.putInt("freq", freq0);
                    spinedit.apply();
                }

            });
            finish();
}

次に、onResume で次のようにします。

@Override
protected void onResume() {

    spinpref=getSharedPreferences("frequency",MODE_PRIVATE);
    int num=spinpref.getInt("freq", 0);
    spinner.setSelection(num);
}

しかし、私のスピナーは最初の値を表示するだけです。これを機能させるにはどうすればよいでしょうか? sharedPrefs が間違っているとは思いませんが、onItemSelected() である可能性があり、他にどのようにこれを行うことができるかわかりません。PS:各位置のこの行を次のように置き換えてみました

spinedit.putInt("freq", position);

私が今持っているものの代わりに:

spinedit.putInt("freq", freq);

しかし、それもうまくいきませんでした。誰かが私のために明らかにしてくれるアイデアや資料はありますか? よろしくお願いします

4

1 に答える 1