Как мне получить строковое значение выбранного элемента моего счетчика? - PullRequest
1 голос
/ 05 января 2020

В моем счетчике есть значения «Мужской», «Женский» и «Мужской и женский». Если кто-то нажимает кнопку «Мужской» в счетчике, я бы хотел получить это значение. Мой существующий код, который использует spinner.getSelectedItem (). ToString (), дает следующий результат:

com.example.kitchen.SpinnerItem@64dd10e

Я даже пытался реализовать .setOnItemSelectedListener (), но это тоже не сработало. Основной код активности:

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;
    }
}

Ответы [ 2 ]

1 голос
/ 05 января 2020

Вам необходимо привести объект к его исходному типу (также проверьте, не является ли он null):

@Nullable Object selectedItem = spinner.getSelectedItem();
if (selectedItem != null) { // selectedItem is null if there is nothing selected
    String item = ((SpinnerItem) selectedItem).getItem();
}

Или вы должны переопределить метод toString, чтобы вернуть значение объекта :

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() даст правильный результат.

0 голосов
/ 05 января 2020

удалось найти решение:

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) {

            }
        });
...