OnItemSelected не работает на пользовательском классе адаптера счетчика - PullRequest
0 голосов
/ 14 сентября 2018

Я могу заполнить мой счетчик списком массивов из API. Но невозможно выбрать или заполнить выбранный элемент из счетчика и отобразить его пользователю.

Метод onItemSelected не получает позицию выбранного элемента в счетчике.

CustomSpinnerAdapter.java

public class CustomSpinnerAdapter extends BaseAdapter {
Context context;
List<String> userNames;
LayoutInflater inflter;

public CustomSpinnerAdapter(Context applicationContext, List<String> userNames) {
    this.context = applicationContext;
    this.userNames = userNames;
    inflter = (LayoutInflater.from(applicationContext));
}

@Override
public int getCount() {
    return userNames.size();
}

@Override
public Object getItem(int i) {
    return userNames.get(i);
}

@Override
public long getItemId(int i) {
    return 0;
}

@NonNull
@SuppressLint({"ViewHolder", "InflateParams"})
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    view = inflter.inflate(R.layout.custom_spinner_item, null);
    CustomTextView names = (CustomTextView) view.findViewById(R.id.tv_spinner_item);
    names.setText(userNames.get(i));
    return view;
   }
}

Моя логика во фрагменте.

private SpinnerAdapter customAdapter;
private List<String> eqIds = new ArrayList<>;

 apiInterface = ApiRequest.createService(ApiInterface.class);
    Call<EquipmentTypeModel> call = apiInterface.getEquipmentType("application/json", token, id);

    call.enqueue(new Callback<EquipmentTypeModel>() {
        @Override
        public void onResponse(Call<EquipmentTypeModel> call, Response<EquipmentTypeModel> response) {
            if (response.isSuccessful()) {
                eqIds.addAll(response.body().getData().getEquipmentList().getEquipIds());
            }
        }

        @Override
        public void onFailure(Call<EquipmentTypeModel> call, Throwable t) {

        }
    });
    customAdapter = new CustomSpinnerAdapter(mContext, eqIds);
    spTypeModel.setAdapter(customAdapter);
    spTypeModel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(mContext, String.valueOf(parent.getAdapter().getItem(position)), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Попробуйте, если это работает (покажет вам значение, а не позицию)

  @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(mContext, parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();
    }
0 голосов
/ 14 сентября 2018

Чтобы получить выбранное значение из счетчика, вы должны

String selectedValue = spTypeModel.getSelectedItem().toString();

или

String selectedValue = String.valueOf(parent.getAdapter().getItem(position));

вместо

String selectedValue = String.valueOf(position);

Обновление: Измените getItem метод в вашем пользовательском адаптере на

@Override
public Object getItem(int i) {
    return userNames.get(i);
}

Обновление 2: Я видел вашу проблему, пожалуйста, измените ваш код.

private SpinnerAdapter customAdapter;

на

private CustomSpinnerAdapter customAdapter;

, затем добавьте эту строку после добавления новых данных в свой адаптер.

eqIds.addAll(response.body().getData().getEquipmentList().getEquipIds());
customAdapter.notifyDataSetChanged(); // Add this line to notify your adapter about new data

Обновление 3: Из вашего XML-файла, поскольку высота прядильщика равна 18 dp.

  • В spinner вы устанавливаете отступ в 4dp (будет 8dp для топа и бота)
  • В пользовательском текстовом просмотре вы также устанавливаете заполнение 4dp (будет 8dp для топа и бота)
  • Таким образом, у вас есть только равное или меньше 2 dp для отображения текстового содержимого, это очень мало, поэтому вы не можете видеть содержимое.

Вы можете установить высоту вращателя на wrap_content или сохраните текущую высоту, но удалите отступы из счетчика или из пользовательского текстового представления.Вам решать.

...