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
我尝试重写这个例子
在此示例中,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();
我正在工作 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 我尝试重写这个例子
在此示例中,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();