web-dev-qa-db-ja.com

androidでスピナーのデフォルト値を表示

性別選択のドロップダウンを表示したい。文字列配列を

String arr[]=new String[]{"male","female"};

しかし、問題は"male"の値でデフォルトの選択を表示することであり、デフォルト値として"Gender"を表示したいです。位置0の配列に「性別」を渡すと、ドロップダウンにも表示されます。ヒントとして「性別」が必要ですが、ドロップダウンに表示しないでください。

誰も私にこれを行う方法を教えてもらえますか。前もって感謝します。

33
rahul
Spinner sp = (Spinner)findViewById(R.id.spinner); 
sp.setSelection(pos);

ここで、posは整数です(配列項目の位置)

配列は以下のようなものですpos = 0;

String str[] = new String{"Select Gender","male", "female" };

その後、onItemSelected

@Override
    public void onItemSelected(AdapterView<?> main, View view, int position,
            long Id) {

        if(position > 0){
          // get spinner value
        }else{
          // show toast select gender
        }

    }
58
Dhaval Parmar

ArrayAdapterを拡張し、getViewメソッドをオーバーライドすることで解決策を見つけました。

import Android.content.Context;
import Android.support.annotation.NonNull;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.Spinner;
import Android.widget.TextView;

/**
 * A SpinnerAdapter which does not show the value of the initial selection initially,
 * but an initialText.
 * To use the spinner with initial selection instead call notifyDataSetChanged().
 */
public class SpinnerAdapterWithInitialText<T> extends ArrayAdapter<T> {

    private Context context;
    private int resource;

    private boolean initialTextWasShown = false;
    private String initialText = "Please select";

    /**
     * Constructor
     *
     * @param context The current context.
     * @param resource The resource ID for a layout file containing a TextView to use when
     *                 instantiating views.
     * @param objects The objects to represent in the ListView.
     */
    public SpinnerAdapterWithInitialText(@NonNull Context context, int resource, @NonNull T[] objects) {
        super(context, resource, objects);
        this.context = context;
        this.resource = resource;
    }

    /**
     * Returns whether the user has selected a spinner item, or if still the initial text is shown.
     * @param spinner The spinner the SpinnerAdapterWithInitialText is assigned to.
     * @return true if the user has selected a spinner item, false if not.
     */
    public boolean selectionMade(Spinner spinner) {
        return !((TextView)spinner.getSelectedView()).getText().toString().equals(initialText);
    }

    /**
     * Returns a TextView with the initialText the first time getView is called.
     * So the Spinner has an initialText which does not represent the selected item.
     * To use the spinner with initial selection instead call notifyDataSetChanged(),
     * after assigning the SpinnerAdapterWithInitialText.
     */
    @Override
    public View getView(int position, View recycle, ViewGroup container) {
        if(initialTextWasShown) {
            return super.getView(position, recycle, container);
        } else {
            initialTextWasShown = true;
            LayoutInflater inflater = LayoutInflater.from(context);
            final View view = inflater.inflate(resource, container, false);

            ((TextView) view).setText(initialText);

            return view;
        }
    }
}

Android Spinnerの初期化時に行うことは、T[] objects内のすべてのアイテムに対してgetViewを呼び出す前に、選択したアイテムに対してgetViewを呼び出します。SpinnerAdapterWithInitialTextTextViewinitialTextでは、最初に呼び出されます。それ以外の場合は、getViewArrayAdapterメソッドであるsuper.getViewを呼び出します。これは、スピナーを使用している場合に呼び出されます通常は。

ユーザーがスピナーアイテムを選択したかどうか、またはスピナーがまだinitialTextを表示しているかどうかを確認するには、selectionMadeを呼び出して、アダプターが割り当てられているスピナーを渡します。

2
pfaehlfd

スピナーはヒントをサポートしていません。カスタムスピナーアダプターを作成することをお勧めします。

このリンクを確認してください: https://stackoverflow.com/a/13878692/1725748

0
OWZY