データベースを介して配列リストを作成してスピナーを実装しました。スピナー配列アダプターで配列リストを取得して表示できますが、スピナーで項目を選択してもスピナーには表示されません。
ここに私のコードがあります、
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();
誰でも私を助けてくれますか!!!
この答えは少し愚かかもしれませんが、試してみてください。それは私のために働いた。
同じ問題が発生し、Spinnerでデータをバインドした後にnotifyDataSetChanged()
を追加することで解決しました。
まず、バインドアダプタにBlankArrayList
を指定してから、サーバーからアイテムのリストを取得し、そのリストに追加しましたが、リストの更新後にnotifyDataSetChanged()
を忘れました。
リストの更新後にadapter.notifyDataSetChanged();
を追加するだけです。
役に立てば幸いです。
スピナーには、デフォルトの項目値も選択された項目値も表示されません。ただし、選択するとドロップダウンメニュー項目が表示されます。
背景とテキストの色は両方とも白です!!!
スピナーアイテムのカスタムレイアウトを作成し、デフォルトの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にはいくつかのメジャーアップデートが必要です。または、Dartとflutterが引き継ぐ必要があります...
カトリックに感謝
使用する wrap_content
Spinner
の高さ。
おそらく、テキストを表示するのに十分な高さがありません。
カスタムアダプタがある場合は、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;
}
カスタムアダプタがない場合は、スピナーの背景を変更するだけです
まあこれは、コンテキストが適切に指定されていない場合にも発生します。 getApplicationContext()
が必要なため、getBaseContext()
を使用していました。
通常、スピナーは使用時にデフォルトで選択されるため、空白または他のデータをゼロ位置の最初の位置に設定しようとすると、選択したアイテムの正確な位置が取得されます。
この答えは少し愚かかもしれませんが、同じ間違いをした場合は、まずArrayListに値を設定してから、そのarrayListをスピナーに割り当ててください。グローバルなarrayListを宣言し、最初にスピナーに設定してから、別のメソッドから値を追加します...そのとき、私は同じ問題に直面しました。それ以外の場合は、arrayListに対してnotifyDataSetChanged()を実行できます。
宣言されたSpinner
要素のxmlでAndroid:spinnerMode="dropdown"
属性を使用します
これらのリンクを確認してください:
そうでない場合は、アイテムの選択時に保存してみてください:
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
}
});
このコードを試してください==>
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);
奇妙な。同じ問題がありました。 1.いくつかの初期データをリストに追加します(例.---選択してください--)2.残りのデータをロードしてリストに追加します3. adapter.notifyDatasetChaged()を呼び出します
私が見つけた問題はスタイルシートにありました。これを使用してください
<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レイアウトの場合、これを使用します
<?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>
そして最後にクラス
String [] NUMBERS= {"3 ","6 ","13 "};
Spinner s_spinner = (Spinner) findViewById(R.id.Spinner);
ArrayAdapter<String> 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 );
この問題が発生したばかりで、リストされたすべての解決策を試した後、スピナーを設定したことが問題であることがわかりましたlayout_width
〜60dp。
Fill_parentに変更し、問題を解決しました。
これを試して。
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) {
}
});
私にとって問題は、getApplicationContext()
を使用していることです。 this
に変更すると正常に動作します。
ArrayAdapter<*> adapter = new ArrayAdapter<>(this, Android.R.layout.simple_spinner_item, documentsCategories);