Spinner:getItemAtPosition(position) 总是返回 null/empty

Posted

技术标签:

【中文标题】Spinner:getItemAtPosition(position) 总是返回 null/empty【英文标题】:Spinner: getItemAtPosition(position) is returning always 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 没有错误 我正在创建服装微调器试试这个***.com/questions/45159011/… 适配器是否为空?尝试根据位置而不是适配器从列表中获取项目 发布课程CustomAdapter 代码并检查Object CustomAdapter#getItem(int position) 是否返回null 【参考方案1】:

SO 答案来源:https://***.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://***.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();

【讨论】:

没有任何区别

以上是关于Spinner:getItemAtPosition(position) 总是返回 null/empty的主要内容,如果未能解决你的问题,请参考以下文章

Android 中使用spinner实现下拉列表的两种方法和getItemAtPosition()方法的使用

Android 获取Spinner所有的值,设置指定值

如何从 ListView 中提取对象 - getItemAtPosition 不起作用

如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio

如何制作Spinner的Hint提示效果,并自定义Spinner样式

Android开发,spinner应用,如何传参的问题