web-dev-qa-db-ja.com

スピナーは選択した値を表示しません

データベースを介して配列リストを作成してスピナーを実装しました。スピナー配列アダプターで配列リストを取得して表示できますが、スピナーで項目を選択してもスピナーには表示されません。

ここに私のコードがあります、

 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();

誰でも私を助けてくれますか!!!

23
Jolly

この答えは少し愚かかもしれませんが、試してみてください。それは私のために働いた。

  1. スピナーの背景色を確認してください!
  2. そして、それが白いならそれを変える
  3. 楽しめ!
42
Catluc

同じ問題が発生し、Spinnerでデータをバインドした後にnotifyDataSetChanged()を追加することで解決しました。

まず、バインドアダプタにBlankArrayListを指定してから、サーバーからアイテムのリストを取得し、そのリストに追加しましたが、リストの更新後にnotifyDataSetChanged()を忘れました。

リストの更新後にadapter.notifyDataSetChanged();を追加するだけです。

役に立てば幸いです。

問題:

スピナーには、デフォルトの項目値も選択された項目値も表示されません。ただし、選択するとドロップダウンメニュー項目が表示されます。

原因:

背景とテキストの色は両方とも白です!!!

ソリューション:

xml(推奨):

スピナーアイテムのカスタムレイアウトを作成し、デフォルトの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が引き継ぐ必要があります...

カトリックに感謝

10
TastyCatFood

使用する wrap_contentSpinnerの高さ。

おそらく、テキストを表示するのに十分な高さがありません。

3
Mladen Rakonjac

カスタムアダプタがある場合は、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;
}

カスタムアダプタがない場合は、スピナーの背景を変更するだけです

3
Ali Salesi

まあこれは、コンテキストが適切に指定されていない場合にも発生します。 getApplicationContext()が必要なため、getBaseContext()を使用していました。

2
Vyshak Athreya

通常、スピナーは使用時にデフォルトで選択されるため、空白または他のデータをゼロ位置の最初の位置に設定しようとすると、選択したアイテムの正確な位置が取得されます。

0
user6584366

この答えは少し愚かかもしれませんが、同じ間違いをした場合は、まずArrayListに値を設定してから、そのarrayListをスピナーに割り当ててください。グローバルなarrayListを宣言し、最初にスピナーに設定してから、別のメソッドから値を追加します...そのとき、私は同じ問題に直面しました。それ以外の場合は、arrayListに対してnotifyDataSetChanged()を実行できます。

0
Apeksha Gunjal

宣言されたSpinner要素のxmlAndroid:spinnerMode="dropdown"属性を使用します

これらのリンクを確認してください:

  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

            }
        });
0
Chintan Soni

このコードを試してください==>

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);
0
Abhijit Rajmane

奇妙な。同じ問題がありました。 1.いくつかの初期データをリストに追加します(例.---選択してください--)2.残りのデータをロードしてリストに追加します3. adapter.notifyDatasetChaged()を呼び出します

0
kylexy1357

私が見つけた問題はスタイルシートにありました。これを使用してください

<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 );
0
RodneyO

この問題が発生したばかりで、リストされたすべての解決策を試した後、スピナーを設定したことが問題であることがわかりましたlayout_width60dp

Fill_parentに変更し、問題を解決しました。

0
JAMES MILLER

これを試して。

 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) {

        }
    });
0
Quang Doan

私にとって問題は、getApplicationContext()を使用していることです。 thisに変更すると正常に動作します。

ArrayAdapter<*> adapter = new ArrayAdapter<>(this, Android.R.layout.simple_spinner_item, documentsCategories);
0
Puni