首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnItemSelected不处理自定义转接器适配器类

OnItemSelected不处理自定义转接器适配器类
EN

Stack Overflow用户
提问于 2018-09-14 14:02:08
回答 2查看 759关注 0票数 1

我可以用API中的数组列表填充我的旋转器。但无法从旋转器中选择或填充所选项,并将其显示给用户。

onItemSelected方法不获取所选项在旋转器中的位置。

CustomSpinnerAdapter.java

代码语言:javascript
复制
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;
   }
}

我的逻辑零碎。

代码语言:javascript
复制
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) {

        }
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-14 14:09:44

要从旋转器中获得选定的值,您应该

代码语言:javascript
复制
String selectedValue = spTypeModel.getSelectedItem().toString();

代码语言:javascript
复制
String selectedValue = String.valueOf(parent.getAdapter().getItem(position));

而不是

代码语言:javascript
复制
String selectedValue = String.valueOf(position);

更新:将自定义适配器中的 getItem方法更改为

代码语言:javascript
复制
@Override
public Object getItem(int i) {
    return userNames.get(i);
}

更新2:我看到您的问题了,请更改您的代码。

代码语言:javascript
复制
private SpinnerAdapter customAdapter;

代码语言:javascript
复制
private CustomSpinnerAdapter customAdapter;

然后在将新数据添加到适配器后添加这一行。

代码语言:javascript
复制
eqIds.addAll(response.body().getData().getEquipmentList().getEquipIds());
customAdapter.notifyDataSetChanged(); // Add this line to notify your adapter about new data

xml 3:文件中的,因为您的旋转器高度为18 is。

  • 在旋转器中,将填充设置为4dp (顶部为8dp,bot为8DP)。
  • 在自定义文本视图中,还设置了填充4dp (顶部为8dp,bot为8dp)。
  • 因此,只有等于或小于2dp才能显示文本内容,这真的很小,为什么您看不到这些内容。

您可以将自旋器高度设置为wrap_content或保持当前高度,但可以从旋转器或自定义文本视图中删除填充。由你决定。

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 14:14:27

试试看这是否有效(它将显示值,而不是位置)

代码语言:javascript
复制
  @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(mContext, parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52333607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档