Spinner不显示选定的值

我已经通过数据库填充数组列表来实现微调器。我可以在我的微调器数组适配器中获取并显示数组列表但是如果我在微调器中选择它没有在微调器中显示?我在这里有什么错误?

这是我的代码,

Spinner spinner1 = (Spinner) findViewById(R.id.prospin); ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_spinner_item, providerlist); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(adapter1); 

我使用这个来获取所选的项目字符串,

 Spinner provid = (Spinner)findViewById(R.id.prospin); String provider =provid.getSelectedItem().toString(); 

任何人都可以帮助我!

这个答案可能有点愚蠢,但尝试一下。 它对我有用。

  1. 检查微调器的背景颜色!
  2. 如果它是白色的改变它
  3. 好好享受!

问题:

微调器既不显示默认值也不显示选定项目值。 但选中后会显示下拉菜单项。

原因:

背景和文字颜色都是白色!!!

解决方案:

XML(优选):

为spiner项目编写自定义布局,并使用它而不是默认的android.R.layout.simple_spinner_item

如何更改微调文本大小和文本颜色?

代码(不太可靠):

 your_spinner_instance.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ public void onItemSelected(AdapterView< ?> parent, View view, int pos, long id) { ((TextView) view).setTextColor(Color.RED); } public void onNothingSelected(AdapterView< ?> parent) { } }); 

Android需要一些重大更新或者飞镖和扑动应该接管…

谢谢Catluc

我遇到了同样的问题,并通过在Spinner中绑定数据后添加notifyDataSetChanged()来解决。

首先,我使用Blank ArrayList绑定适配器,然后从服务器获取项目列表并添加到该列表但忘记更新List后的notifyDataSetChanged()

希望它会有所帮助。

使用wrap_content作为微调器的高度。 可能它没有足够的高度来显示文字。

如果您有自定义适配器,则应更改TextView文本颜色

 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) super.getView(position, convertView, parent); view.setTextColor(Color.parseColor("#000000")); return view; } 

如果您没有自定义适配器,则应该更改微调器背景

尝试这个。

  final ArrayList providerlist= new ArrayList(); Spinner spinner1 = (Spinner) findViewById(R.id.prospin); ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_spinner_item, providerlist); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(adapter1); spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView< ?> parent, View view, int position, long id) { // On selecting a spinner item String item = providerlist.get(position); // Showing selected spinner item Toast.makeText(this, "Selected Country : " + item, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView< ?> parent) { } }); 

您应该使用第一个Spinner来获取值。

请尝试以下代码:

 String provider = spinner1.getSelectedItem().toString(); 

你正在做的是获得微调器的默认值。

检查以下链接:

  1. http://www.technotalkative.com/android-spinner-example/
  2. http://www.mkyong.com/android/android-spinner-drop-down-list-example/

否则,尝试将其存储在选择项目上:

 spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView< ?> adapter, View v, int position, long id) { // On selecting a spinner item String item = adapter.getItemAtPosition(position).toString(); // Showing selected spinner item Toast.makeText(getApplicationContext(), "Selected Country : " + item, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView< ?> arg0) { // TODO Auto-generated method stub } }); 

在声明的Spinner元素的xml中使用android:spinnerMode="dropdown"属性

一般情况下,微调器在使用时会被选中,因此尝试将空白或任何其他数据设置为零位置的第一个位置,您将获得所选项目的准确位置。

我发现的问题是样式表。使用这个

  

对于xml布局,请使用此选项

 < ?xml version="1.0" encoding="utf-8"?>       

最后为全class

 String [] NUMBERS= {"3 ","6 ","13 "}; Spinner s_spinner = (Spinner) findViewById(R.id.Spinner); ArrayAdapter spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, NUMBERS); // Specify the layout to use when the list of choices appears spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // attaching data adapter to spinner s_spinner.setAdapter(spinnerAdapter ); 

这个答案可能有点愚蠢,但是如果你犯同样的错误,那么先尝试……先将值设置为ArrayList,然后将该arrayList赋值给spinner。 我声明了一个全局arrayList并首先将它设置为spinner,然后从另一个方法向它添加值……那时我遇到了同样的问题。 否则,您可以对您的arrayList执行notifyDataSetChanged()。

试试这段代码==>

 ArrayAdapter stateNameAdaptor = new ArrayAdapter(this,android.R.layout.simple_list_item_1, stateNameList); stateNameAdaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spnState.setAdapter(stateNameAdaptor); 

如果没有正确给出上下文,这也会发生。 我正在使用getApplicationContext() ,因为它需要getBaseContext()

试试这段代码

 ArrayAdapter arrayAdapte=new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,states); arrayAdapte.setDropDownViewResource(android.R.layout.simple_list_item_1 ); spinnerState.setAdapter(arrayAdapte); String data=spinnerState.getSelectedItem().toString(); // this is select particular item from list; int position=spinnerState.getSelectedItemPosition(); // this return position of data selected in list; 

你必须做一些改变:

 Spinner spinner1 = (Spinner) findViewById(R.id.prospin); ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_spinner_item, providerlist); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

而不是“android.R.layout.simple_spinner_dropdown_item”

 adapter1.setDropDownViewResource(android.R.layout.simple_list_item_activated_1); 

使用“android.R.layout.simple_list_item_activated_1”

 spinner1.setAdapter(adapter1); 

它将相应地突出显示所选值。 所选颜色由您的应用默认主题选择。

有关更多信息,请访问以下链接: https : //developer.android.com/reference/android/R.layout.html#simple_list_item_activated_1