2013-12-08 4 views
6

私のアプリにスピナーを実装しました。私は学校のリストを表示していますが、ユーザーが学校を選択することを知っておくために、デフォルト値/プロンプトが必要です。また、リスト項目としてプロンプトを表示しなくても、これを実行したいと思っています。何か案は?デフォルトのテキストを設定するAndroidスピナーセットのデフォルトテキスト

selectSchoolSpinner = (Spinner) findViewById(R.id.select_school_spinner); 
spinnerSchoolList = new ArrayList<String>(); 

spinnerSchoolList.add("Please select School"); 
//I don't want to have a prompt like the latter  

ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_spinner_item, spinnerSchoolList); 

spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

selectSchoolSpinner.setAdapter(spinnerAdapter); 

答えて

9

するTry setSelection方法:

spinner.setSelection(adapter.getPosition(DEFAULT_CURRENCY_TYPE))

そして、このリンクを見て:How to make an Android Spinner with initial text "Select One"

はここで、これまでの私のスピナーコードです。それは非常に便利です(@ aaronvargas答えはあなたが必要なものです)。

+0

おかげで私のために働きました。 –

17

コンストラクタで目的のテキスト用のStringを使用してカスタムArrayAdapterを作成する必要があります。次に、配列の最初の要素をデフォルトのテキストに切り替える必要があります。ユーザーがスピナーをクリックすると、元の配列に戻ります。

例:

Activityクラス:

public class SpinnerActivity extends Activity { 

    Spinner spinner; 
    String defaultTextForSpinner = "Your deafult text here"; 
    String[] arrayForSpinner = {"One", "Two", "Three"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_spinner); 

     spinner = (Spinner) findViewById(R.id.your_spinner); 
     spinner.setAdapter(new CustomSpinnerAdapter(this, R.layout.spinner_row, arrayForSpinner, defaultTextForSpinner)); 
    } 
    } 

CustomSpinnerAdapterクラス:

public class CustomSpinnerAdapter extends ArrayAdapter<String>{ 

    Context context; 
    String[] objects; 
    String firstElement; 
    boolean isFirstTime; 

    public CustomSpinnerAdapter(Context context, int textViewResourceId, String[] objects, String defaultText) { 
     super(context, textViewResourceId, objects); 
     this.context = context; 
     this.objects = objects; 
     this.isFirstTime = true; 
     setDefaultText(defaultText); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     if(isFirstTime) { 
      objects[0] = firstElement; 
      isFirstTime = false; 
     } 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     notifyDataSetChanged(); 
     return getCustomView(position, convertView, parent); 
    } 

    public void setDefaultText(String defaultText) { 
     this.firstElement = objects[0]; 
     objects[0] = defaultText; 
    } 

    public View getCustomView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.spinner_row, parent, false); 
     TextView label = (TextView) row.findViewById(R.id.spinner_text); 
     label.setText(objects[position]); 

     return row; 
    } 

    } 
+0

ありがとう、それは完璧に動作し、良い仕事! –

+0

getCustomViewメソッドでエラーが発生します。 R.id.tremps_spinner_rowとR.id.tremps_spinner_textは何ですか –

+0

私の答えをもう一度チェックして、私はそれを編集しました。 spinner_rowはスピナー項目のレイアウトです。 spinner_textはspinner_rowレイアウト内のTextViewです –

1
 @Override 
    protected void onPostExecute(PositionBean[] result) { 
     String[] spinnerArray = new String[result.length]; 

     if(result!=null) { 

      for (int i = 0; i < result.length; i++) { 

       String positionName = result[i].getPositionName(); 
       spinnerArray[i] = result[i].getPositionName(); 

      } 
      ArrayList<String> positionList = new ArrayList<String>(Arrays.asList(spinnerArray)); 
      positionList.add(0,"select"); 
      String [] positions = positionList.toArray(new String[positionList.size()]); 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(EngineActivity.this, android.R.layout.simple_spinner_item, 
        positions); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      positionSpinner.setAdapter(adapter); 
     }else{ 
      Log.d("NULL", "This is null"); 
     } 

    } 
+0

配列で少し遊んで問題を解決しましたが、これが誰かを助けることを願っています –

関連する問題