android baseadapter return 自定义 class 不是字符串

android baseadapter return custom class not string

我正在工作 baseadapter.i 有自定义 baseadapter.i 在 spinner.i 中使用我的适配器 有一个 problem.mybaseadapter 的 OnItemClickedListener return 编辑了我所有的自定义 class

carbon.widget.Spinner$CustomClass@535ca050s

这是一个结果 这是我的代码

  public static class CustomClass {
    private String Name;

    public void setName(String name)
    {
        this.Name=name;
    }
    public String getName()
    {
        return Name;
    }
    public CustomClass(String name)
    {
        this.Name=name;
    }
}

public static class Adapter extends RecyclerView.Adapter<ViewHolder, CustomClass> {

   private ArrayList<CustomClass>items=new ArrayList<>();

    @Override
    public CustomClass getItem(int position) {
        return items.get(position);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.carbon_popup_row, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        super.onBindViewHolder(holder, position);
        holder.tv.setText(items.get(position).getName());
        Log.e("position String", items.get(position).getName() + "s");
    }

    @Override
    public int getItemCount() {
        return items.size();
    }


    public void setItems(ArrayList<CustomClass> items) {
        this.items = items;
        notifyDataSetChanged();
    }
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    TextView tv;

    public ViewHolder(View itemView) {
        super(itemView);
        tv = (TextView) itemView.findViewById(R.id.carbon_itemText);

    }
}

我像这样在我的 baseadapter 中插入了一些值

       for (int i = 0; i < 40; i++) {
        CustomClass customClass = new CustomClass("item" + i);
        // customClass.setName("beka" + i);
        list.add(customClass);
    }

    Spinner day = (Spinner) findViewById(R.id.day);
    day.setItems(list);

这是我的 setItem 方法

 public void setItems(ArrayList<CustomClass> items) {
    popupMenu.setAdapter(defaultAdapter);
    defaultAdapter.setOnItemClickedListener(onItemClickedListener);
    defaultAdapter.setItems(items);
}




  RecyclerView.OnItemClickedListener onItemClickedListener = new RecyclerView.OnItemClickedListener() {
    @Override
    public void onItemClicked(int position) {
        setText(popupMenu.getAdapter().getItem(position).toString());
        Log.e("position String",popupMenu.getAdapter().getItem(position).toString()+"s");
        popupMenu.dismiss();
    }
};

正如我所说,我无法 return 我的自定义 class 的 getName。我该如何解决我的问题?如果有人知道解决方案请帮助我 p.s 我尝试重写这个例子

https://github.com/ZieIony/Carbon

在此示例中,autor 使用了字符串数组,但我想使用我的自定义数组 我该如何解决我的问题?

popupMenu.getAdapter().getItem(position) 在你的 returning CustomClass 中,并且由于你没有在其中覆盖 toString(),你看到的是 [=15 的默认实现=].为了显示名称,您可以覆盖它和 return 名称。例如

@Override
public String toString() {
   return name != null ? name : "no name set";
}

或者您可以直接调用 popupMenu.getAdapter().getItem(position).getName()

例如

CustomClass objectAtPos = popupMenu.getAdapter().getItem(position);
 if (objectAtPos != null) {
    setText(objectAtPos.getName());
    Log.e("position String",objectAtPos.getName()+"s");
 }
 popupMenu.dismiss();