2011-03-17 82 views
1

所以,此刻我是從一個數據庫表中填充的微調。目前使用微調時,也就是在微調的第一個值是剛從這是不甚理想的數據庫中的第一個。來自Db的Android Spinner - 默認值= null?

是否有微調一個很好的方式開始空白,而無需插入一個空白記錄或什麼?

+0

紗廠總有一個選定的項目,據我所看到的。我還沒有看到一個空白的微調,如果它填充項目。爲什麼你想要它是空的? – Klaus 2011-03-17 21:18:46

+0

是啊,我現在有一個反思,並已決定走製作的項目爲「未分類」的路線,並具有作爲第一選擇,而不僅僅是空白。感謝澄清傢伙。 – user319940 2011-03-17 21:33:23

+0

檢查http://stackoverflow.com/questions/5988605/how-to-remove-text-that-appears-on-a-spinner-control-in-android – Nick 2011-08-13 22:46:20

回答

1

所以看起來這不太可能,相反,我走了與我選擇的名稱數據庫位置1處添加行不同的方法,並修改了查詢,以便場均能」 t被刪除。

1

好了,你可以使用Spinner視圖的屬性prompt,我是否android:prompt="whatever"setPrompt("whatever") 希望這有助於


對不起,我誤解,我不知道有沒有表現出以下任何方式初始值而不必添加空值。您必須提供與「無選擇」值相對應的項目。

+0

嗯?是不是提示標題?不要以爲這是他的問題。 – Klaus 2011-03-17 21:15:31

0

如果你想有一個decorater spinnerAdapter女巫自動添加一個默認值:

 



    public class SpinnerWithNoValue extends Spinner { 

     public SpinnerWithNoValue(Context context) { 
      super(context); 
     } 

     public SpinnerWithNoValue(Context context, AttributeSet attrs) { 
      super(context, attrs); 
     } 

     public SpinnerWithNoValue(Context context, AttributeSet attrs, int defStyle) { 
      super(context, attrs, defStyle); 
     } 

     @Override 
     public void setAdapter(SpinnerAdapter orig) { 
      final SpinnerAdapter adapter = new SpinnerAdapterWithNoValue(orig); 
      super.setAdapter(adapter); 

      try { 
       final Method m = AdapterView.class.getDeclaredMethod("setNextSelectedPositionInt",int.class); 
       m.setAccessible(true); 
       m.invoke(this,-1); 

       final Method n = AdapterView.class.getDeclaredMethod("setSelectedPositionInt",int.class); 
       n.setAccessible(true); 
       n.invoke(this,-1); 

      } catch(Exception e) { 
       throw new RuntimeException(e); 
      } 
     } 

     /* 
     * getSelectedItem 
     * renvoi null si la valeur par defaut est séléctionnée 
     * @see android.widget.AdapterView#getSelectedItem() 
     */ 
     @Override 
     public Object getSelectedItem() 
     { 
      return super.getSelectedItem(); 
     } 
     } 

 

你只需要改變:

 


    protected class SpinnerAdapterWithNoValue implements SpinnerAdapter { 

      private SpinnerAdapter _current; 
      private final static String defaultValue = "Choisir"; 

      public SpinnerAdapterWithNoValue(SpinnerAdapter base) { 
       _current = base; 
      } 

      @Override 
      public int getCount() { 
       // TODO Auto-generated method stub 
       return _current.getCount()+1; 
      } 

      @Override 
      public Object getItem(int arg0) { 
       // TODO Auto-generated method stub 
       if(arg0 == 0 || arg0 == -1) 
       { 
        return null; 
       } 
       return _current.getItem(arg0-1); 
      } 

      @Override 
      public long getItemId(int arg0) { 
       // TODO Auto-generated method stub 
       if(arg0 == 0 || arg0 == -1) 
       { 
        return -1; 
       } 
       return _current.getItemId(arg0-1); 
      } 

      @Override 
      public int getItemViewType(int arg0) { 
       // TODO Auto-generated method stub 
       if(arg0 == 0 || arg0 == -1) 
       { 
        return -1; 
       } 
       return _current.getItemViewType(arg0-1); 
      } 

      @Override 
      public View getView(int arg0, View convertView, ViewGroup parent) { 
       // TODO Auto-generated method stub 
       if(arg0 == 0 || arg0 == -1) 
       { 
        final TextView v = (TextView) ((LayoutInflater)getContext() 
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 
          .inflate(R.layout.spinner_text,parent,false); 
        v.setText(defaultValue); 
        return v; 
       } 
       return _current.getView(arg0-1, convertView, parent); 
      } 

      @Override 
      public int getViewTypeCount() { 
       // TODO Auto-generated method stub 
       return _current.getViewTypeCount(); 
      } 

      @Override 
      public boolean hasStableIds() { 
       // TODO Auto-generated method stub 
       return _current.hasStableIds(); 
      } 

      @Override 
      public boolean isEmpty() { 
       // TODO Auto-generated method stub 
       return _current.isEmpty(); 
      } 

      @Override 
      public void registerDataSetObserver(DataSetObserver arg0) { 
       // TODO Auto-generated method stub 
       _current.registerDataSetObserver(arg0); 
      } 

      @Override 
      public void unregisterDataSetObserver(DataSetObserver arg0) { 
       // TODO Auto-generated method stub 
       _current.unregisterDataSetObserver(arg0); 
      } 

      @Override 
      public View getDropDownView(int arg0, View convertView, ViewGroup parent) { 
       // TODO Auto-generated method stub 
       if(arg0 == 0 || arg0 == -1) 
       { 
        CheckedTextView v = (CheckedTextView)((LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(android.R.layout.simple_spinner_dropdown_item,parent,false); 
        v.setText(defaultValue); 
        return v; 
       } 
       return _current.getDropDownView(arg0-1, convertView, parent); 
      } 
     } 

 

然後你就可以使用這個decorater創建自己微調在你的XML佈局中的微調聲明:

 


    com.myproject.SpinnerWithNoValue 

 

如果你想,你可以c請更改代碼以在您的微調器標籤中設置默認文本。

如果選擇的值是默認值,會的getItem返回null,getItemId將返回-1