【问题标题】:Dropdown android - call setOnItemSelectedListener only when user change its valueDropdown android - 仅在用户更改其值时调用 setOnItemSelectedListener
【发布时间】:2020-11-18 13:11:41
【问题描述】:

我有一个下拉列表,我在上面设置了一些值,并默认显示用户从共享首选项保存的最后一个值。它运作良好。问题是当我开始活动时,将这个保存的用户值放在选择上,默认情况下,它调用setOnItemSelectedListener 并向用户显示敬酒。这次我不想在 setOnItemSelectedListener 中运行块代码,就在用户更改下拉值时。有什么办法解决吗?

String defaultValue = pref02.getString("fonte", "Normal");
String[] items = new String[]{"Normal", "10", "12", "14", "16", "18", "20", "24", "28", "30"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
dropdown.setAdapter(adapter);
int spinnerPosition = adapter.getPosition(defaultValue);
dropdown.setSelection(spinnerPosition); //select the atual saved value.
dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        SharedPreferences pref2 = getApplicationContext().getSharedPreferences("pref02", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref2.edit();

        String drop = dropdown.getSelectedItem().toString();
        editor.putString("fonte", drop);
        editor.apply();
        Toast.makeText(Config.this, "Saved :)", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
    }
});

【问题讨论】:

    标签: java android android-studio dropdown


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多