gpt4 book ai didi

android - 为什么我的自定义微调器填充了我的包名称?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:12 24 4
gpt4 key购买 nike

我找到了 this workaround用于向下拉微调器添加提示。它看起来很有希望,但我没有在微调器中显示我想要的字符串,而是得到了一些看起来像我的包名称的东西(看不到全名)。
enter image description here

@IsaacCisneros 创建了新的 SpinnerItem 和 MySpinnerAdapter 类。我完全实现了他的新类(class)。我的实现如下所示:

ArrayList<SpinnerItem> credValues = new ArrayList<SpinnerItem>();
credValues.add(new SpinnerItem("3.0",false));
credValues.add(new SpinnerItem("Credit", true));

MySpinnerAdapter adapter_cred = new MySpinnerAdapter(this.getActivity(),
android.R.layout.simple_spinner_item, credValues);
adapter_cred.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

Spinner spinCred = (Spinner)rootView.findViewById(R.id.cred_spinner);
spinCred.setAdapter(adapter_cred);
spinCred.setSelection(credValues.size() - 1);

他的样子是这样的:

ArrayList<SpinnerItem> items = new ArrayList<SpinnerItem>();
items.add(new SpinnerItem("Item 1", false));
items.add(new SpinnerItem("Item 2", false));
items.add(new SpinnerItem("HINT", true)); // Last item

MySpinnerAdapter adapter = new MySpinnerAdapter(this, android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(items.size() - 1);

那么为什么我的行为很奇怪?我的代码的上下文是我的 Activity 中我的 AddItemFragment 的 onCreateView。我指错了什么?谢谢!


编辑:请求适配器类代码...

class SpinnerItem {
private final String text;
private final boolean isHint;

public SpinnerItem(String strItem, boolean flag) {
this.isHint = flag;
this.text = strItem;
}

public String getItemString() {
return text;
}

public boolean isHint() {
return isHint;
}
}

class MySpinnerAdapter extends ArrayAdapter<SpinnerItem> {
public MySpinnerAdapter(Context context, int resource, List<SpinnerItem> objects) {
super(context, resource, objects);
}

@Override
public int getCount() {
return super.getCount() - 1; // This makes the trick: do not show last item
}

@Override
public SpinnerItem getItem(int position) {
return super.getItem(position);
}

@Override
public long getItemId(int position) {
return super.getItemId(position);
}
}

最佳答案

原因是你没有覆盖适配器的getView()方法。因此,它使用如下所示的默认实现:

T item = getItem(position);

if (item instanceof CharSequence) {
text.setText((CharSequence)item);
}
else {
text.setText(item.toString());
}

在您的 SpinnerItem 中,您没有 toString() 方法,因此它使用默认值(即您看到的包名称)

解决此问题的一种方法是将 toString() 方法添加到您的 SpinnerItem:

class SpinnerItem {
private final String text;
private final boolean isHint;

public SpinnerItem(String strItem, boolean flag) {
this.isHint = flag;
this.text = strItem;
}

public String getItemString() {
return text;
}

public boolean isHint() {
return isHint;
}

@Override
public String toString() {
return text;
}
}

如果你想要更多的控制,比如提示文本的不同颜色等。我建议你自己实现 getView() 方法。

关于android - 为什么我的自定义微调器填充了我的包名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com