下拉android-仅当用户更改其值时才调用setonitemselectedlistener

l7wslrjt  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(405)

我有一个下拉列表,我在上面设置了一些值,并显示,默认情况下,最后一个值用户保存从共享pref。它工作得很好。问题是当我启动活动时,将这个保存的用户值放在select上,作为默认值,它正在调用 setOnItemSelectedListener 向用户敬酒。我不想在setonitemselectedlistener中运行块代码,只是在用户更改下拉值时。你知道怎么解决吗?

  1. String defaultValue = pref02.getString("fonte", "Normal");
  2. String[] items = new String[]{"Normal", "10", "12", "14", "16", "18", "20", "24", "28", "30"};
  3. ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
  4. dropdown.setAdapter(adapter);
  5. int spinnerPosition = adapter.getPosition(defaultValue);
  6. dropdown.setSelection(spinnerPosition); //select the atual saved value.
  7. dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  8. @Override
  9. public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
  10. SharedPreferences pref2 = getApplicationContext().getSharedPreferences("pref02", MODE_PRIVATE);
  11. SharedPreferences.Editor editor = pref2.edit();
  12. String drop = dropdown.getSelectedItem().toString();
  13. editor.putString("fonte", drop);
  14. editor.apply();
  15. Toast.makeText(Config.this, "Saved :)", Toast.LENGTH_LONG).show();
  16. }
  17. @Override
  18. public void onNothingSelected(AdapterView<?> parentView) {
  19. // your code here
  20. }
  21. });
s4chpxco

s4chpxco1#

解决方案:使用下面的代码(您可以查看注解行以查看指南)

  1. String defaultValue = pref02.getString("fonte", "Normal");
  2. String[] items = new String[]{"Normal", "10", "12", "14", "16", "18", "20", "24", "28", "30"};
  3. ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
  4. dropdown.setAdapter(adapter);
  5. int spinnerPosition = adapter.getPosition(defaultValue);
  6. dropdown.setSelection(spinnerPosition); //select the atual saved value.
  7. // Add this block of code
  8. dropdown.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
  9. @Override
  10. public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
  11. // Remove listener to make sure it doesn't called later.
  12. dropdown.removeOnLayoutChangeListener(this);
  13. // Set your listener here
  14. dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  15. @Override
  16. public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
  17. SharedPreferences pref2 = getApplicationContext().getSharedPreferences("pref02", MODE_PRIVATE);
  18. SharedPreferences.Editor editor = pref2.edit();
  19. String drop = dropdown.getSelectedItem().toString();
  20. editor.putString("fonte", drop);
  21. editor.apply();
  22. Toast.makeText(Config.this, "Saved :)", Toast.LENGTH_LONG).show();
  23. }
  24. @Override
  25. public void onNothingSelected(AdapterView<?> parentView) {
  26. // your code here
  27. }
  28. });
  29. }
  30. });
展开查看全部

相关问题