android - 具有自定义 ArrayAdapter 的微调器,用于不显示所选项目的对象

标签 android view spinner android-arrayadapter selected

我有一个自定义的 ArrayAdapter 来表示微调器控件上的对象,我可以加载我的项目 列出并显示它以供选择,但当实际选择发生时,微调器什么也不显示。

Activity 代码:

public MetroData metroData;
private Spinner spinner;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    metroData = new MetroData();
    spinner = (Spinner) findViewById(R.id.spinner1);
    StopArrayAdapter dAdapter = new StopArrayAdapter(this, metroData.Stops);

    spinner.setAdapter(dAdapter);
}

停止数组适配器:

public class StopArrayAdapter extends ArrayAdapter<MetroStop> {

private List<MetroStop> items;
private Activity activity;

public StopArrayAdapter(Activity activity, List<MetroStop> items) {
    super(activity, android.R.layout.simple_list_item_1, items);
    this.items = items;
    this.activity = activity;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    TextView v = (TextView) super.getView(position, convertView, parent);

    if (v == null) {
        v = new TextView(activity);
    }
    v.setTextColor(Color.BLACK);
    v.setText(items.get(position).getName());
    return v;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = activity.getLayoutInflater();
        v = inflater.inflate(R.layout.view_spinner_item, null);
    }
    TextView lbl = (TextView) v.findViewById(R.id.text1);
    lbl.setTextColor(Color.BLACK);
    lbl.setText(items.get(position).getName());
    return convertView;
}
}

微调器 View 项目模板:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textColor="#222"/>

关于为什么所选项目 View 不起作用的任何想法?顺便说一句,我也用普通的 ArrayAdapter 尝试过,结果相同。

更新 似乎已生成 View ,但查看层次结构查看器时, View 未呈现,Measured/Layout/Draw = n/a。

最佳答案

我发现了问题所在。因为我正在获取 spinner 的数据从互联网上,我需要触发 notifyDataSetChanged() , 即使没有这个 spinner 的内容已更新。好像是selected item view没有得到通知。

关于android - 具有自定义 ArrayAdapter 的微调器,用于不显示所选项目的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10678521/

相关文章:

java - 将路径点添加到 Google map Intent (Android)

android - RxJava2 - 将多个 Singles 发出的结果组合成一个 Map

Android ffmpeg 视频剪辑

python - 如何在 scipy 稀疏矩阵上创建 View /python 引用?

javascript - 如何在 yii2 php 中添加 spinner/loader

android - 单击 Android Spinner 仅在模拟器上抛出 NullPointerException

android - 放置API自动填充问题

android - 显示搜索栏的进度

android - 将触摸传递给下的 View

android - 选择其他项目时显示第一个项目文本的微调器