我的活动中有一个微调器,其中包含操作符名称,当用户从微调器中选择项目时我想要的内容我想向服务器发送另一个值,如 如果用户从微调器中选择“Airtel”,我必须像其他项一样向服务器发送“AR”。我可以这样做。
代码: - \
<string-array name="operators">
<item>Select Operator</item>
<item>Aircel</item>
<item>Airtel</item>
<item>BSNL</item>
<item>Idea</item>
<item>Vodafone</item>
<item>MTNL Delhi</item>
<item>MTNL Mumbai</item>
</string-array>
当用户从上面的列表中选择项目时,我必须根据以上项目从下面的列表中发送值。
<string-array name="Operators_Code">
<item>AC</item>
<item>AT</item>
<item>BS</item>
<item>ID</item>
<item>VD</item>
<item>MT</item>
</string-array>
答案 0 :(得分:0)
类似于ListView,RecyclerView等的Spinner是一个“适配器支持”视图。也就是说,它从Adapter
获取要显示的项目。
当您使用android:entries="@array/operators
设置要显示的条目时,Spinner会在内部使用提供的数组项创建一个Adapter。但是,这个简单的解决方案不支持复杂的对象。
对于您的用例,您必须为Spinner创建自定义适配器。
public class Operator {
String name;
String code;
@Override
public String toString() {
return name;
}
}
final List<Operator> operators = new ArrayList(7);
operators.add(new Operator("Select operator", null));
operators.add(new Operator("Aircel", "AC"));
operators.add(new Operator("Airtel", "AC"));
....
接下来,在微调器上设置适配器:
final ArrayAdapter<String> operatorsAdapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, operators);
spinner.setAdapter(operatorsAdapter);
就是这样。现在,如果您想要收听用户的选择,请通过以下方式向Spinner添加一个监听器:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
final Operator selectedOperator = operatorsAdapter.getItem(position);
final String selectedOperatorCode = selectedOperator.code;
// TODO: Send the selected operator to the server.
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});