java - 具有空默认选定项的微调器

标签 java android android-spinner

我正在尝试创建一个带有默认空选择项的微调器,但它显示了微调器选项中的第一个项目。如果我将空值添加到我的字符串中,这是微调器中选择的来源,那么在打开微调器之后会显示该空行。我应该怎么做?这是我正在使用的代码:

  String[] ch = {"Session1", "Session2", "Session3"};
  Spinner sp = (Spinner)findViewById(R.id.spinner1);
  TextView sess_name = findViewById(R.id.sessname);
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,ch);
  sp.setAdapter(adapter);

  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

  sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener({
      @Override
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
          int index = arg0.getSelectedItemPosition();
          sess_name.setText(ch[index]);

          Toast.makeText(getBaseContext(), "You have selected item : " + ch[index], Toast.LENGTH_SHORT).show();
      }

最佳答案

Barak 的解决方案有问题。选择第一项时,Spinner 不会调用 OnItemSelectedListener 的 onItemSelected() 刷新空内容,因为前一个位置和选择位置都是 0。

首先在字符串数组的开头放置一个空字符串:

String[] test = {" ", "one", "two", "three"};

第二次构建适配器,不修改getView(),修改getDropDownView()。将空 View 的高度设置为 1px。

public class MyArrayAdapter extends ArrayAdapter<String> {

    private static final int ITEM_HEIGHT = ViewGroup.LayoutParams.WRAP_CONTENT;

    private int textViewResourceId;


    public MyArrayAdapter(Context context,
                          int textViewResourceId,
                          String[] objects) {
        super(context, textViewResourceId, objects);
        this.textViewResourceId = textViewResourceId;
    }

    @Override
    public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
        TextView textView;

        if (convertView == null) {
            textView = (TextView) LayoutInflater.from(getContext())
                   .inflate(textViewResourceId, parent, false);
        } else {
            textView = (TextView) convertView;
        }

        textView.setText(getItem(position));
        if (position == 0) {
            ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
            layoutParams.height = 1;
            textView.setLayoutParams(layoutParams);
        } else {
            ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
            layoutParams.height = ITEM_HEIGHT;
            textView.setLayoutParams(layoutParams);
        }

        return textView;
    }
}

关于java - 具有空默认选定项的微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483883/

相关文章:

java - 为什么 Spinner 类不提供泛型?

java - 如何将字符串值设置为从 Android 中的 Firestore 数据库检索的微调器?

java - 语法错误插入 while 表达式来完成 JAVA block 语句

java - 在 RxJava 中,如何在链接 observables 时传递变量?

java - 使用 ProgressDialog 下载文件,取消下载 (Android)

android - 如何在android中延迟加载共享库

android - 播放所需文件夹中的音频文件

java - JTable,禁用用户列拖动

android - 在非 root 的 Android 上模拟主机文件

android - 我想要 1 个 Spinner 依赖于另一个 Spinner 项目