在更改前获取上次选择的微调器值

时间:2016-03-05 18:46:49

标签: android android-spinner

我有一个微调器,当我点击微调器时(基本上就在显示列表中的项目之前),我想得到它的最后一个选定值。

我怎样才能做到这一点?

更新: 示例:有一定数量的微调器。用户点击微调器1并选择一个值,让我们说“房子”。然后点击其他地方。然后再次点击旋转器1。我现在需要的是返回之前在用户选择不同值(即该旋转器中的“car”)之前选择的值“house”。我不能事先使用本地存储来保存该值,因为它将是一个动态数量的微调器。

是的,事实上,我确实已经在http://developer.android.com/guide/topics/ui/controls/spinner.html阅读了文档,但我在那里没有解释。

3 个答案:

答案 0 :(得分:0)

也许您可以声明一个String数组,然后使用它来存储项值。在TextView中显示它是一种查看它是否有效的方法。

这样的事情:

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    selection.setText(items[arg2]);

}

我已经遇到了类似的情况,但我不记得我是如何解决它的。告诉我,如果它给你一个更好的主意,我是新来的参与者。

答案 1 :(得分:-1)

Spinner mySpinner=(Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();
  

当用户从下拉列表中选择一个项目时,Spinner对象   收到一个项目选择的事件。

     

要为微调器定义选择事件处理程序,请实现   AdapterView.OnItemSelectedListener接口和相应的   onItemSelected()回调方法。例如,这是一个   在Activity中实现接口:

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...

    public void onItemSelected(AdapterView<?> parent, View view, 
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
}
     

AdapterView.OnItemSelectedListener需要onItemSelected()   和onNothingSelected()回调方法。

     

然后你需要通过调用来指定接口实现   setOnItemSelectedListener():

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);

在你的情况下:

如果用户点击了微调器,请执行以下操作:

     if (spin.getSelectedItemPosition() < 0) {
    Spinner mySpinner=(Spinner) findViewById(R.id.your_spinner);
    String text = mySpinner.getSelectedItem().toString();

}

这意味着用户点击了微调器,但没有点击任何项目。

再次编辑

 public class SpinnerActivity extends Activity implements OnItemSelectedListener {
>         ...
>         
>         public void onItemSelected(AdapterView<?> parent, View view, 
>                 int pos, long id) {
>              parent.getItemAtPosition(pos) //THIS GETS YOU THAT VALUE THAT THE USER CLICKED ON DYNAMICALLY
>         }
>     
>         public void onNothingSelected(AdapterView<?> parent) {
>             // Another interface callback
>         }
>     }

http://developer.android.com/guide/topics/ui/controls/spinner.html

答案 2 :(得分:-1)

解决方案是在每个添加的Spinner中添加TextView小部件。将TextView设置为&#34;去掉了#34; (不可见)。当微调器更改时,将值设置为该TextView。这样,您可以将最后选定的微调器值存储在TextView中。当用户单击微调器并更改值时,您仍然可以通过TextView小部件从微调器访问先前选择/未选择的值。

// Use this TextView to temporarily store the spinner value
final TextView hiddenTextView = new TextView(getContext());
hiddenTextView.setVisibility(View.GONE);

final Spinner spinner = new Spinner(getContext());
spinner.setPrompt(getString(R.string.email_other));

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(), R.array.email_types, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {

            Log.d(TAG, "TextView Value before spinner change: " + hiddenTextView.getText());

            String spinnerValue = String.valueOf(spinner.getSelectedItem());

            hiddenTextView.setText(spinnerValue);
            Log.d(TAG, "TextView Value after spinner change: " + hiddenTextView.getText());
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            return;
        }

    });