我已经通过数据库填充数组列表来实现微调器。我可以在我的微调器数组适配器中获取并显示数组列表但是如果我在微调器中选择它没有在微调器中显示?我在这里有什么错误?
这是我的代码,
Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(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();
任何人都可以帮帮我!!!
答案 0 :(得分:41)
这个答案可能有点愚蠢,但试试吧。它对我有用。
答案 1 :(得分:13)
我遇到了同样的问题,并在Spinner中绑定数据后添加了notifyDataSetChanged()
。
首先,我使用空白 ArrayList
绑定适配器,然后从服务器获取项目列表并添加到该列表但在更新列表后忘记notifyDataSetChanged()
。
在更新列表后添加adapter.notifyDataSetChanged();
。
希望它会有所帮助。
答案 2 :(得分:10)
Spinner既不显示默认值也不显示选定项目值。但选择后会显示下拉菜单项。
背景和文字颜色都是白色!!!
为spiner项目编写自定义布局,并使用它而不是默认值android.R.layout.simple_spinner_item
。
How to change spinner text size and text color?
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
答案 3 :(得分:3)
我正在使用宽度和高度的硬编码值。更改为wrap_content后,它可以工作。
答案 4 :(得分:3)
使用wrap_content
作为Spinner
的高度。
可能它没有足够的高度来显示文字。
答案 5 :(得分:3)
如果您有自定义适配器,则应更改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;
}
如果您没有自定义适配器,则应该更改微调器背景
答案 6 :(得分:2)
如果没有正确给出上下文,也会发生这种情况。我正在使用getApplicationContext()
,因为它需要getBaseContext()
。
答案 7 :(得分:1)
试试这个。
final ArrayList<String> providerlist= new ArrayList<String>();
Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(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) {
}
});
答案 8 :(得分:0)
检查以下链接:
否则,尝试将其存储在选择项目上:
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
}
});
答案 9 :(得分:0)
在我的情况下,列表是从firestore中填充的,然后才提供给适配器构造。该列表已经填充,并显示在微调器中。但是列表的大小返回了零。因此,我只能从列表中选择项目,但微调器文本中没有任何显示,并且无法调用onitemselected部件。以前,我对querysnapshot进行了回调,并从快照中填充了列表。它仅导致将项目添加到微调器,但无法选择。我通过对列表进行回调来解决此问题,而不是通过存储库类中的querysnapshot解决此问题,在此之后,我的列表得到了很好的填充,其大小正确且旋转器工作正常。.我的代码附在这里..希望对您有所帮助。 ..
//interface
public interface SprRbaCallback{
void onSprRbaCallback(List<String> list);
}
//Repository class
public void getRBA(final SprRbaCallback sprRbaCallback){
rbaCollection.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for(DocumentSnapshot snapshot : queryDocumentSnapshots){
String item = (String) snapshot.get("dealerName");
assert item != null;
Log.d(TAG, item);
list.add(item);
}
Log.d(TAG, String.valueOf(list.size()));
sprRbaCallback.onSprRbaCallback(list);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, e.toString());
}
});
}
// calling method..
private void addItemsToRBASpinner() {
firebaseRepository.getRBA(new FirebaseRepository.SprRbaCallback() {
@Override
public void onSprRbaCallback(List<String> list) {
int size = list.size();
Log.d(TAG + "listsize", String.valueOf(size));
ArrayAdapter<String> sprAdaptSelectRBA = new ArrayAdapter<String>(CreateAccountActivity.this,
R.layout.spinneritem, list);
sprAdaptSelectRBA.setDropDownViewResource(R.layout.rbaspinner_dropdown);
spr_rbaSelect.setAdapter(sprAdaptSelectRBA);
sprAdaptSelectRBA.notifyDataSetChanged();
spr_rbaSelect.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("NOBY", "ENTERED ON ITEMSELETED");
txt_selectedRBA = (String) parent.getItemAtPosition(position);
Toast.makeText(parent.getContext(), "Selected RBA: " + txt_selectedRBA, Toast.LENGTH_LONG).show();
Log.d("NOBY", txt_selectedRBA);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.d("NOBY", "ENTERED NOTHING SELECTED");
txt_selectedRBA = "Dixon";
}
});
}
});
}
这段代码对我来说很好...希望能帮助到别人...:)
答案 10 :(得分:0)
我遇到了同样的问题,没有一个解决方案对我有用。最终发现问题是通过异步任务从firestore db中填充了微调器。 重新排列代码,以便在异步任务完成后设置适配器,瞧!!
答案 11 :(得分:0)
这种情况偶尔会发生,我想这是一个错误,但是有一种变通办法很有趣,但是只需这样做,
在微调器的属性栏中,将背景设置为其他颜色,
在具有旋转器的.xml中,设置:
android:background="@android:drawable/spinner_background_material"
运行代码,它将产生一个错误,指出背景是私有的
删除.xml中android:background
的行并再次运行代码,如果不采取额外的步骤将背景色设置为其他颜色,则微调器应该可以很好地显示所有值最好是黑色。
再次运行。
答案 12 :(得分:0)
例如添加白色背景色,并显示详细信息 例如
<Spinner
android:id="@+id/size_spinner"
style="@style/FormTextStyle"
android:drawSelectorOnTop="true"
android:layout_marginStart="@dimen/default_gap"
android:background="@android:color/white"
/>
答案 13 :(得分:0)
我只是遇到了这个问题,在尝试了所有列出的解决方案后,发现问题是我将微调器layout_width
设置为 60dp 。
将其更改为fill_parent并解决了问题。
答案 14 :(得分:0)
out_marginLeft="50dp"
android:layout_marginTop="50dp"
android:layout_marginRight="50dp"
android:gravity="center"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/txtProgress"
android:layout_centerHorizontal="true"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:progress="50"
android:progressTint="@android:color/black" />
<TextView
android:id="@+id/txtProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Progress"
android:textColor="@android:color/black" />
</LinearLayout>
Java
答案 15 :(得分:0)
荒诞。我有同样的问题。我做了什么使它起作用: 1.将一些初始数据添加到列表中(例如---请选择--) 2.加载其余数据并将其添加到列表中 3.调用adapter.notifyDatasetChaged()
答案 16 :(得分:0)
对我来说,问题是我正在使用getApplicationContext()
。当我更改为this
时,效果很好。
ArrayAdapter<*> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, documentsCategories);
答案 17 :(得分:0)
这个答案可能有点愚蠢,但如果你犯了同样的错误,那么试试...... 首先将值设置为ArrayList,然后将该arrayList分配给spinner。 我声明了一个全局arrayList并首先将它设置为spinner,然后从另一个方法向它添加值......那时我遇到了同样的问题。否则,您可以对您的arrayList执行notifyDataSetChanged()。
答案 18 :(得分:0)
试试这段代码==&gt;
ArrayAdapter<String> stateNameAdaptor = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, stateNameList);
stateNameAdaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnState.setAdapter(stateNameAdaptor);
答案 19 :(得分:0)
我发现的问题与样式表有关。使用此
for (int i = 1; i < nRows - 2; i++) // NOT from 0 to nRows - 1
{
for (int j = 1; j < nCols - 2; j++) // NOT from 0 to nCols - 1
对于xml布局,请使用此
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="windowNoTitle">false</item>
<item name="windowActionBar">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
最后为班级
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true"
android:paddingBottom="5dp"
style="@style/AppTheme">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Spinner"
android:layout_marginTop="10dp"
android:textColor="@color/colorBlack"/>
<Spinner
android:id="@+id/Spinner"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:backgroundTint="@color/colorPrimary"
android:textColorHint="#05ab9a"
android:padding="15dp"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
tools:targetApi="lollipop" />
</LinearLayout>
</ScrollView>
答案 20 :(得分:0)
一般情况下,微调器在使用时会被选中,因此尝试将空白或任何其他数据设置为零位置的第一个位置,您将获得所选项目的准确位置。
答案 21 :(得分:0)
在声明的android:spinnerMode="dropdown"
元素 xml
Spinner
属性
答案 22 :(得分:0)
您应该使用第一个Spinner来获取值。
请尝试以下代码:
String provider = spinner1.getSelectedItem().toString();
您正在做的是获取微调器的默认值。
答案 23 :(得分:-1)
你必须做一些改动:
Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(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
答案 24 :(得分:-1)
尝试此代码
ArrayAdapter<String> arrayAdapte=new ArrayAdapter<String>(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;