【问题标题】:Spinner: getItemAtPosition(position) is returning always null/emptySpinner:getItemAtPosition(position) 总是返回 null/empty
【发布时间】:2017-12-24 14:13:04
【问题描述】:

当我从微调器的下拉列表中选择时,我想在textView 中显示选定的项目,我实现了AdapterView.OnItemSelectedListener,但是当我选择项目时,它总是null/empty 这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    spinner = (Spinner) findViewById(R.id.spinner);
    spinner.setAdapter(new CustomAdapter(MainActivity.this, Languages));

    btn.setOnClickListener(this);
    spinner.setOnItemSelectedListener(this);

}

@Override
public void onItemSelected(AdapterView<?> parent, 
                        View view, int position, long id) {

    item = (String)parent.getItemAtPosition(position);

        Toast.makeText(MainActivity.this, item.toString(),
                Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
}

【问题讨论】:

  • 共享错误日志猫
  • android logcat 没有错误
  • 我正在创建服装微调器试试这个stackoverflow.com/questions/45159011/…
  • 适配器是否为空?尝试根据位置而不是适配器从列表中获取项目
  • 发布课程CustomAdapter 代码并检查Object CustomAdapter#getItem(int position) 是否返回null

标签: java android android-spinner onitemselectedlistener


【解决方案1】:

SO 答案来源:https://stackoverflow.com/a/49301966/5461982

我知道这是一个较老的问题,但如果其他人遇到它,请务必检查您为 Spinner 设置的适配器的自定义实现是否覆盖了 getItem 方法:

@Override
public Object getItem(int position) {
    return spinnerItems.get(position);
}

默认情况下,您在实现自定义BaseAdapter 时需要覆盖此方法,但默认返回类型为null。一定要修改返回类型为return spinnerItems.get(position)

希望这会有所帮助,我最初花了大约 30 分钟来解决这个问题!

【讨论】:

    【解决方案2】:

    试试这个,

    String selected_item = spinner.getSelectedItem().toString();
    

    【讨论】:

    • String str= String.valueOf(yourSpinner.getItemAtPosition(position));
    • 此应用程序在首次运行时崩溃:尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.String.toString()'
    • 这意味着微调器没有数组项。请检查微调器数组项是否
    • 检查Languages 数组。我怀疑该数组为空。
    【解决方案3】:

    只需从字符串数组中检索值:

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        final String item = Languages[position];
        Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
    }
    

    【讨论】:

      【解决方案4】:

      试试这个

      spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
              @Override
              public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                  sSelectedItem = arr_spiner.get(spinner.getSelectedItemPosition())
                          .getName();
                  txtSpinnerValue.setText(sSelectedItem);
              }
              @Override
              public void onNothingSelected(AdapterView<?> parent) {
              }
          });
      
      https://stackoverflow.com/questions/45159011/spinner-item-is-not-visible-data-is-coming-from-server-android/45161202#45161202
      

      【讨论】:

        【解决方案5】:

        试试这个

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        
            spinner = (Spinner) findViewById(R.id.spinner);
            spinner.setAdapter(new CustomAdapter(MainActivity.this, Languages));
        
            btn.setOnClickListener(this);
            spinner.setOnItemSelectedListener(this);
        
        }
        
        @Override
        public void onItemSelected(AdapterView<?> parent, 
                                View view, int position, long id) {
        
            //item = (String)parent.getItemAtPosition(position);
              item = (String) spinner.getSelectedItem().toString(); //Here is the Change
        
                Toast.makeText(MainActivity.this, item.toString(),
                        Toast.LENGTH_SHORT).show();
        }
        
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
        

        这里的变化是

        来自

        item = (String)parent.getItemAtPosition(position);
        

        item = (String) spinner.getSelectedItem().toString();
        

        【讨论】:

        • 没有任何区别
        猜你喜欢
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        • 2014-03-04
        • 2016-11-02
        • 2014-05-06
        • 2012-06-05
        相关资源
        最近更新 更多