如何检索微调器所选项目的字符串值?
How do I retrieve the string value of my spinner's selected item?
在我的微调器中,我有值 'Male'、'Female' 和 'Male and female'。如果有人在微调器中单击 'Male',我想检索该值。我现有的代码使用 spinner.getSelectedItem().toString() 提供以下结果:
com.example.kitchen.SpinnerItem@64dd10e
我什至尝试过实现 .setOnItemSelectedListener() 但这也没有用。主要 activity 代码:
public class ManageEventsActivity extends AppCompatActivity {
String stringCreateEventGender;
ArrayList<String> arrayUpcomingEventGender = new ArrayList<>();
ArrayList<SpinnerItem> mGenderList = new ArrayList<>();
SpinnerAdapter genderAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_events);
spinnerCreateEventGender = findViewById(R.id.spinnerCreateEventGender);
initGenderList();
genderAdapter = new SpinnerAdapter(this, mGenderList);
spinnerCreateEventGender.setAdapter(genderAdapter);
}
private void initGenderList() {
mGenderList.add(new SpinnerItem("Male"));
mGenderList.add(new SpinnerItem("Female"));
mGenderList.add(new SpinnerItem("Male and female"));
}
}
旋转器适配器代码:
public class SpinnerAdapter extends ArrayAdapter<SpinnerItem> {
public SpinnerAdapter(Context context, ArrayList<SpinnerItem> genderList) {
super(context, 0, genderList);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position, convertView, parent);
}
private View initView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.spinner_layout, parent, false
);
}
TextView textViewItem = convertView.findViewById(R.id.textViewItem);
SpinnerItem currentItem = getItem(position);
if (currentItem != null) {
textViewItem.setText(currentItem.getItem());
}
return convertView;
}
}
微调器项目代码:
public class SpinnerItem {
String mItem;
public SpinnerItem(String item) {
mItem = item;
}
public String getItem() {
return mItem;
}
}
您需要将对象转换为其原始类型(同时检查它是否不是 null
):
@Nullable Object selectedItem = spinner.getSelectedItem();
if (selectedItem != null) { // selectedItem is null if there is nothing selected
String item = ((SpinnerItem) selectedItem).getItem();
}
或者您应该覆盖 toString
方法以便 return 对象的值:
public class SpinnerItem {
String mItem;
public SpinnerItem(String item) {
mItem = item;
}
public String getItem() {
return mItem;
}
@NonNull
@Override
public String toString() {
return mItem;
}
}
然后 spinner.getSelectedItem().toString()
将提供正确的结果。
设法找到解决方案:
spinnerCreateEventGender.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinnerItem = (SpinnerItem) parent.getItemAtPosition(position);
clickedItem = spinnerItem.getItem();
Toast.makeText(ManageEventsActivity.this, clickedItem, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
在我的微调器中,我有值 'Male'、'Female' 和 'Male and female'。如果有人在微调器中单击 'Male',我想检索该值。我现有的代码使用 spinner.getSelectedItem().toString() 提供以下结果:
com.example.kitchen.SpinnerItem@64dd10e
我什至尝试过实现 .setOnItemSelectedListener() 但这也没有用。主要 activity 代码:
public class ManageEventsActivity extends AppCompatActivity {
String stringCreateEventGender;
ArrayList<String> arrayUpcomingEventGender = new ArrayList<>();
ArrayList<SpinnerItem> mGenderList = new ArrayList<>();
SpinnerAdapter genderAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_events);
spinnerCreateEventGender = findViewById(R.id.spinnerCreateEventGender);
initGenderList();
genderAdapter = new SpinnerAdapter(this, mGenderList);
spinnerCreateEventGender.setAdapter(genderAdapter);
}
private void initGenderList() {
mGenderList.add(new SpinnerItem("Male"));
mGenderList.add(new SpinnerItem("Female"));
mGenderList.add(new SpinnerItem("Male and female"));
}
}
旋转器适配器代码:
public class SpinnerAdapter extends ArrayAdapter<SpinnerItem> {
public SpinnerAdapter(Context context, ArrayList<SpinnerItem> genderList) {
super(context, 0, genderList);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position, convertView, parent);
}
private View initView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.spinner_layout, parent, false
);
}
TextView textViewItem = convertView.findViewById(R.id.textViewItem);
SpinnerItem currentItem = getItem(position);
if (currentItem != null) {
textViewItem.setText(currentItem.getItem());
}
return convertView;
}
}
微调器项目代码:
public class SpinnerItem {
String mItem;
public SpinnerItem(String item) {
mItem = item;
}
public String getItem() {
return mItem;
}
}
您需要将对象转换为其原始类型(同时检查它是否不是 null
):
@Nullable Object selectedItem = spinner.getSelectedItem();
if (selectedItem != null) { // selectedItem is null if there is nothing selected
String item = ((SpinnerItem) selectedItem).getItem();
}
或者您应该覆盖 toString
方法以便 return 对象的值:
public class SpinnerItem {
String mItem;
public SpinnerItem(String item) {
mItem = item;
}
public String getItem() {
return mItem;
}
@NonNull
@Override
public String toString() {
return mItem;
}
}
然后 spinner.getSelectedItem().toString()
将提供正确的结果。
设法找到解决方案:
spinnerCreateEventGender.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinnerItem = (SpinnerItem) parent.getItemAtPosition(position);
clickedItem = spinnerItem.getItem();
Toast.makeText(ManageEventsActivity.this, clickedItem, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});