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()方法的使用
如何从 ListView 中提取对象 - getItemAtPosition 不起作用
如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio