Spinner не может сохранить выбранное значение - PullRequest
0 голосов
/ 08 октября 2018

Прежде чем я объясню вам, я сказал вам, что я искал все вопросы в stackoverflow и многих веб-сайтах, поэтому не помечайте его как дубликат или какие-либо негативные действия.Я старался, много работал и все еще застрял здесь много дней.Мне нужно, чтобы вы решили простую проблему.

У меня есть проблема, связанная с вертушкой.Я пытался использовать общие настройки, чтобы сохранить значение по умолчанию, это работает.Но когда я каждый раз пытаюсь сохранить выбранное значение счетчика, происходит сбой, когда я возвращаюсь на предыдущую страницу, я не могу получить значение, выбранное ранее.

FontSettings.java

public class FontSettings extends AppCompatActivity {

private Spinner spinner1, spinnerLatin;
private SharedPreferences mMyPrefs;
private SharedPreferences.Editor mMyEdit;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_font);

    // toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //this line shows back button
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //Display data size teks arab in dropdown list spinner
    Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> spinnerArrayAdapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
    spinnerArrayAdapter.setDropDownViewResource(R.layout.textview_with_background);
    spinnerBackgroundChange.setAdapter(spinnerArrayAdapter);
    //save selected spinner value
    SharedPreferences sharedPref = getSharedPreferences("My_Prefs", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor=sharedPref.edit();
    editor.putInt("spinnerValue", spinnerBackgroundChange.getSelectedItemPosition());
    editor.apply();

    //Display data size teks latin in dropdown list spinner
    Spinner spinnerLatin = (Spinner)findViewById(R.id.spinnerLatin);
    ArrayAdapter<CharSequence> spinnerArrayLatin = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
    spinnerArrayLatin.setDropDownViewResource(R.layout.textview_with_background);
    spinnerLatin.setAdapter(spinnerArrayLatin);
    // spinnerLatin default value
    spinnerLatin.setSelection(1);

    addListenerOnSpinnerItemSelection();
    addListenerOnSpinner2ItemSelection();
}

public void addListenerOnSpinnerItemSelection() {
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new SizeArabFont());
}

public void addListenerOnSpinner2ItemSelection() {
    spinnerLatin = (Spinner) findViewById(R.id.spinnerLatin);
    spinnerLatin.setOnItemSelectedListener(new SizeLatinFont());
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            this.finish();
            return true;
    }
    return super.onOptionsItemSelected(item);
} }

SizeArabFont.java

public class SizeArabFont implements OnItemSelectedListener {

private SharedPreferences.Editor mMyEdit;

public void onItemSelected (AdapterView <?> parent, View view, int pos, long id){

    ((TextView) view).setTextColor(Color.parseColor("#226169"));

    switch(pos) {
        case 0:
            Activity activity = (Activity) parent.getContext();
            TextView dgs = (TextView) activity.findViewById(R.id.tekzArab);
            dgs.setTextSize(12);
            break;

        case 1:
            Activity activitys = (Activity) parent.getContext();
            TextView dgf = (TextView) activitys.findViewById(R.id.tekzArab);
            dgf.setTextSize(14);
            break;

        default:
            Activity activityu = (Activity) parent.getContext();
            TextView dgx = (TextView) activityu.findViewById(R.id.tekzArab);
            dgx.setTextSize(24);
            break;

    }
}

@Override
public void onNothingSelected (AdapterView <?> arg0){
    // TODO Auto-generated method stub
} }

SettingsFont.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/reldoa"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="3dp"
android:background="@android:color/white"
android:orientation="vertical">

        <TextView
            android:id="@+id/sizedoa"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:paddingBottom="10dp"
            android:paddingLeft="15dp"
            android:paddingTop="5dp"
            android:text="Ukuran Font"
            android:textColor="#222222"
            android:textSize="18sp" />

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true" />
  </RelativeLayout>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/reldoa"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="3dp"
android:background="@android:color/white"
android:orientation="vertical">

<TextView
    android:id="@+id/sizelatin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:paddingBottom="10dp"
    android:paddingLeft="15dp"
    android:paddingTop="5dp"
    android:text="Jenis Font"
    android:textColor="#222222"
    android:textSize="18sp" />

<Spinner
    android:id="@+id/spinner2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:entries="@array/type_arrays"
    android:prompt="@string/type_font"/>

  </RelativeLayout>

    <!-- Font latin -->

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/relLatin"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="35dp"
        android:background="@android:color/white"
        android:orientation="vertical">

        <TextView
            android:id="@+id/fontLatin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:paddingBottom="15dp"
            android:paddingLeft="15dp"
            android:paddingTop="15dp"
            android:text="Font Latin"
            android:textColor="#226169"
            android:textSize="20sp" />

    </RelativeLayout>

Большое спасибо за вашу помощь!

[ОБНОВЛЕНИЕ КОДА] Обновите код с кодом, полученным от @Pedro Massango

public class FontSettings extends AppCompatActivity {

private Spinner spinner1, spinnerLatin;
private SharedPreferences mMyPrefs;
private SharedPreferences.Editor mMyEdit;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_font);

    // toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //this line shows back button
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //Display data size teks arab in dropdown list spinner
    final Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> spinnerArrayAdapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
    spinnerArrayAdapter.setDropDownViewResource(R.layout.textview_with_background);
    spinnerBackgroundChange.setAdapter(spinnerArrayAdapter);

    spinnerBackgroundChange.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            SharedPreferences sharedPref = getSharedPreferences("My_Prefs", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor=sharedPref.edit();
            editor.putInt("spinnerValue", spinnerBackgroundChange.getSelectedItemPosition());
            editor.apply();

            if (position == 1) {
                int lastSelectedPosition = sharedPref.getInt("spinnerValue", 1);
                spinnerBackgroundChange.setSelection(lastSelectedPosition);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });


    //Display data size teks latin in dropdown list spinner
    Spinner spinnerLatin = (Spinner)findViewById(R.id.spinnerLatin);
    ArrayAdapter<CharSequence> spinnerArrayLatin = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
    spinnerArrayLatin.setDropDownViewResource(R.layout.textview_with_background);
    spinnerLatin.setAdapter(spinnerArrayLatin);
    // spinnerLatin default value
    spinnerLatin.setSelection(1);

    addListenerOnSpinnerItemSelection();
    addListenerOnSpinner2ItemSelection();
}

public void addListenerOnSpinnerItemSelection() {
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new SizeArabFont());
}

public void addListenerOnSpinner2ItemSelection() {
    spinnerLatin = (Spinner) findViewById(R.id.spinnerLatin);
    spinnerLatin.setOnItemSelectedListener(new SizeLatinFont());
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            this.finish();
            return true;
    }
    return super.onOptionsItemSelected(item);
} }

Я использую этот код, и он работает для меня.Чтобы сохранить выбранное значение счетчика:

final SharedPreferences sharedPref = getSharedPreferences("My_Prefs", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor0 = sharedPref.edit();
                    editor0.putInt("VALUE", spinnerBackgroundChange.getSelectedItemPosition());
                    editor0.commit();

И загрузить или получить выбранное значение счетчика:

spinnerBackgroundChange.setSelection(sharedPref.getInt("VALUE", 6));

1 Ответ

0 голосов
/ 08 октября 2018

Чтобы сохранить выбранный элемент в общих папках, используйте этот код в onCreate (...) :

final Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);
        spinnerBackgroundChange.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                SharedPreferences sharedPref = getSharedPreferences("My_Prefs", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor=sharedPref.edit();
                editor.putInt("spinnerValue", spinnerBackgroundChange.getSelectedItemPosition());
                editor.apply();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

Чтобы всегда выбирать предыдущий выбранный элемент на Spinner, простовызовите этот код после того, как вы поместили данные на счетчик:

 SharedPreferences sharedPref = getSharedPreferences("My_Prefs", Context.MODE_PRIVATE);

        final Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);

        int lastSelectedPosition = sharedPref.getInt("spinnerValue", 0);
        spinnerBackgroundChange.setSelection(lastSelectedPosition);

Помните, что в настоящее время вы сохраняете выбранную позицию элемента , а не значение.

ОБНОВЛЕНИЕ (новый ответ ниже)

Добавление другого решения ниже.Я заметил, что вы поместили код для обновления позиции в неправильном месте, поэтому я просто поместил этот код в нужное место (после инициализации Spinner).Пожалуйста, попробуйте и дайте мне знать, если это не сработало.

    public class FontSettings extends AppCompatActivity {

    private Spinner spinner1, spinnerLatin;
    private SharedPreferences mMyPrefs;
    private SharedPreferences.Editor mMyEdit;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_font);

        // toolbar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //this line shows back button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        //Display data size teks arab in dropdown list spinner
        final Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);
        ArrayAdapter<CharSequence> spinnerArrayAdapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
        spinnerArrayAdapter.setDropDownViewResource(R.layout.textview_with_background);
        spinnerBackgroundChange.setAdapter(spinnerArrayAdapter);

        // Code pasted here
        if (spinnerBackgroundChange.getSelectedItemPosition() == 0) {
            int lastSelectedPosition = sharedPref.getInt("spinnerValue", 0);
            spinnerBackgroundChange.setSelection(lastSelectedPosition);
        }

        spinnerBackgroundChange.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                SharedPreferences sharedPref = getSharedPreferences("My_Prefs", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor=sharedPref.edit();
                editor.putInt("spinnerValue", spinnerBackgroundChange.getSelectedItemPosition());
                editor.apply();

               // Code removed here
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });


        //Display data size teks latin in dropdown list spinner
        Spinner spinnerLatin = (Spinner)findViewById(R.id.spinnerLatin);
        ArrayAdapter<CharSequence> spinnerArrayLatin = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);
        spinnerArrayLatin.setDropDownViewResource(R.layout.textview_with_background);
        spinnerLatin.setAdapter(spinnerArrayLatin);
        // spinnerLatin default value
        spinnerLatin.setSelection(1);

        addListenerOnSpinnerItemSelection();
        addListenerOnSpinner2ItemSelection();
    }

    public void addListenerOnSpinnerItemSelection() {
        spinner1 = (Spinner) findViewById(R.id.spinner1);
        spinner1.setOnItemSelectedListener(new SizeArabFont());
    }

    public void addListenerOnSpinner2ItemSelection() {
        spinnerLatin = (Spinner) findViewById(R.id.spinnerLatin);
        spinnerLatin.setOnItemSelectedListener(new SizeLatinFont());
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    } 
}
...