Android 如何从微调器检索数据并对其进行处理?

Android 如何从微调器检索数据并对其进行处理?,android,spinner,settext,onitemselectedlistener,Android,Spinner,Settext,Onitemselectedlistener,这是我的代码中出错的部分(我省略了所有变量声明以使其简短):我需要创建两个微调器并从中检索值,比如value1和value2。然后我需要用value1和value2计算一些东西,输出应该显示在屏幕上。每当我从微调器中选择(新)项时,都需要更新此输出。但是,我的代码根本不会将值从微调器传递到java代码。有人能帮我吗?非常感谢 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

这是我的代码中出错的部分(我省略了所有变量声明以使其简短):我需要创建两个微调器并从中检索值,比如value1和value2。然后我需要用value1和value2计算一些东西,输出应该显示在屏幕上。每当我从微调器中选择(新)项时,都需要更新此输出。但是,我的代码根本不会将值从微调器传递到java代码。有人能帮我吗?非常感谢

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sdpsalary_comp);

    //create a spinner called Spinner1
    Spinner1= (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this,
            R.array.cities, android.R.layout.simple_spinner_item);

    //cities is defined as string-array in XML    
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    Spinner1.setAdapter(adapter1);
    value1 = Spinner1.getSelectedItem().toString();

    //create another spinner called Spinner2
    Spinner2 = (Spinner) findViewById(R.id.spinner2);
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,
            R.array.cities, android.R.layout.simple_spinner_item);
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    Spinner2.setAdapter(adapter2);
    value2 = Spinner2.getSelectedItem().toString();
}

// I need to update the output field whenever I changed the content from the spinners
public void onItemSelected(AdapterView<?> parent, View view,
                           int pos, long id) {
    String output;
    switch(parent.getId()){
        case R.id.spinner1:
            value1 = Spinner1.getSelectedItem().toString();
            Output = ((TextView)findViewById(R.id.out));
            output=Target(base, value1, value2, cost); 
    //variables base, cost and method Target() are defined somewhere else
            Output.setText(output);
            break;
        case R.id.spinner2:
            value2 = Spinner2.getSelectedItem().toString();
            Output = ((TextView)findViewById(R.id.out));
            output=Target(base, value1, value2, cost); //base and cost are defined somewhere else
            Output.setText(output);
            break;
    }
}

public void onNothingSelected(AdapterView<?> parent) {
}

下面是一个在Android中使用微调器的示例

         String[] spinnerData=new String["A","B","C"];

            ArrayAdapter<String> itemsArray=new ArrayAdapter<String>(getContext(),android.R.layout.simple_spinner_dropdown_item,spinnerData);
        Spinner spinner1=(Spinner)view.findViewById(R.id.spinner1);       
        spinner1.setAdapter(itemsArray);

        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String selectedItem=String.valueOf(adapterView.getItemAtPosition(i));

            }

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

        Spinner spinner2=(Spinner)view.findViewById(R.id.spinner2);       
        spinner2.setAdapter(itemsArray);

        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String selectedItem=String.valueOf(adapterView.getItemAtPosition(i));

            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
String[]喷丝头数据=新字符串[“A”、“B”、“C”];
ArrayAdapter itemsArray=新的ArrayAdapter(getContext(),android.R.layout.simple\u微调器\u下拉菜单\u项,微调器数据);
Spinner spinner1=(Spinner)view.findViewById(R.id.spinner1);
喷丝头1.设置适配器(itemsArray);
spinner1.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
String selectedItem=String.valueOf(adapterView.getItemAtPosition(i));
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
Spinner spinner2=(Spinner)view.findViewById(R.id.spinner2);
喷丝头2.设置适配器(itemsArray);
spinner2.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
String selectedItem=String.valueOf(adapterView.getItemAtPosition(i));
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});

请在
onCreate()方法中添加以下行

spinner1.setOnItemSelectedListener(this);
spinner2.setOnItemSelectedListener(this);

如果没有这些选项,微调器将无法侦听单击事件。

中更改所选值的获取方式,如下图所示:

// Change this
value1 = Spinner1.getSelectedItem().toString();

// to this
value1 = String.valueOf(parent.getItemAtPosition(pos));
另外,在初始化
输出时
TextView,您可以将其设置为
onCreate

Output = ((TextView)findViewById(R.id.out)); // move this on your onCreate

是否在微调器中填充值?是否将
微调器初始化为选中的
微调器<代码>喷丝头1.setOnItemSelectedListener(此)
@SushantSomani是的,我可以单击并从AVD更改微调器中的值,但该值不会传递到我的java代码中。@t您的意思是我应该在value1=Spinner1.getSelectedItem().toString()之前或之后添加该行代码吗?无论哪种方式,我的应用程序都不会崩溃。@JieyuYou-在
findViewById()
之后,在您的
onCreate上初始化它。谢谢,但您能指出我的错误吗?这对我会有很大帮助。@JieyuYou现在您已经在selectedItem变量中选择了值。您可以分享您想要传递的java代码吗?不,value1和value2保持不变(即,微调器中的第一个值)。我已经编辑了我的答案,其中我为这两个设置了两个不同的setOnItemSelectedListener@JieyuYou@JieyuYou的实现比这更方便。只需为两个微调器创建一个已选择的函数,然后它将基于它们的ID。我尝试了,但它崩溃了。。IndexOutofBoundsException我刚刚添加了itcheck R.array.cities如果真的有项目直到有IndexOutofBoundsException问题请删除
value1=Spinner1.getSelectedItem().toString()onCreate
方法上执行code>。因为您没有在
onCreate
上设置任何选定项。您是对的,我的应用程序不断崩溃的原因是变量“base”的初始(默认)值。添加if()语句后,我的应用程序可以正常启动。非常感谢。
// Change this
value1 = Spinner1.getSelectedItem().toString();

// to this
value1 = String.valueOf(parent.getItemAtPosition(pos));
Output = ((TextView)findViewById(R.id.out)); // move this on your onCreate