2015-09-15 26 views
0

如何设置在转我的第一个值(默认值)为空。意思是,直到用户从列表中选择值,微调器将没有价值。我下面试过如何设置在转我的第一个值(默认值)为空

list.add(""); 

但是,它不起作用。以下是我的代码:

if(values.contains("options")){ 
     spinner.setOnItemSelectedListener(MyClass.this); 
     List<String> list = new ArrayList<String>(); 
     list.add(""); 
     list.add("Test"); 
     list.add("Working"); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, list) {}; 

     adapter.setDropDownViewResource(R.layout.custom_spinner_list); 
     spinner.setAdapter(adapter);  
    } 
} 
+0

空的意思你要设置 – Pavya

+0

@ user3676184 - 空意味着“空”值或“无”字符串 – user45678

+0

没有鲁斯塔姆,我不想清除我的名单,我只是想微调的默认值是空的,意味着价值将只一旦用户选择显示,直到这时微调将没有任何价值 – user45678

回答

5

我找到了方法。下面是我们如何做到这一点,让最后一行是

list.add(""); 

,并添加如下代码:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, list) { 

         @Override 
         public View getView(int position, View convertView, ViewGroup parent) { 

           View v = super.getView(position, convertView, parent); 
           if (position == getCount()) { 
            ((TextView)v.findViewById(android.R.id.text1)).setText(""); 
            ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed" 
           } 

           return v; 
          }  

          @Override 
          public int getCount() { 
           return super.getCount()-1;   // you don't display last item. It is used as hint. 
          } 

        }; 


        adapter.setDropDownViewResource(R.layout.custom_spinner_list); 
        spinner.setAdapter(adapter); 
        spinner.setSelection(adapter.getCount());  //set the hint the default selection so it appears on launch. 
        spinner.setOnItemSelectedListener(this); 
        notifyDataSetChanged();   
+0

定义字符串项静态微调setPrompt只能这是一个了不起的解决方案,因为它避免了破解第一从不出现的观点。我发布了一个SpinnerNoDefault类,它将这个答案考虑在内。谢谢! –

0

由于以上user45678的回答,我写了这个

public class SpinnerNoDefault extends Spinner { 

public void initialize(List<String> items) { 
    initialize(items, android.R.layout.simple_spinner_item, android.R.layout.simple_spinner_dropdown_item); 
} 

public void initialize(List<String> items, @LayoutRes int mItemResId, @LayoutRes int dropdownResId) { 
    List<String> itemsWithEmpty = new ArrayList<>(items); 
    itemsWithEmpty.add(""); 

    String[] choicesArray = itemsWithEmpty.toArray(new String[itemsWithEmpty.size()]); 
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), mItemResId, choicesArray) { 
     @NonNull 
     @Override 
     public View getView(int position, View convertView, @NonNull ViewGroup parent) { 
      View v = super.getView(position, convertView, parent); 
      if (position == getCount()) { 
       ((TextView)v.findViewById(android.R.id.text1)).setText(null); 
       ((TextView)v.findViewById(android.R.id.text1)).setHint(parent.getContext().getString(R.string.spinner_no_default_hint)); 
      } 

      return v; 
     } 

     @Override 
     public int getCount() { 
      // Don't display last item. It is used as hint. 
      return super.getCount()-1; 
     } 
    }; 

    spinnerArrayAdapter.setDropDownViewResource(dropdownResId); 
    setAdapter(spinnerArrayAdapter); 
    setSelection(itemsWithEmpty.size()-1); 
} 
}