2013-07-04 28 views
3

HIeveryone! 我看了這個問題上的其他問題byr沒有找到一個全面的答案。所以,我再次問。我的應用程序必須在Android 2.3.3及更高版本上工作。我有一個微調器和適配器來顯示數據。當用戶點擊微調時,我想以下拉的方式顯示數據列表。我真的不明白我應該如何實現這一點。在android 2.3.3及更高版本中的微調器的下拉模式

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    _messageSpinner = (Spinner) findViewById(R.id.message_filter_spnStatus); 

    ArrayList<String> messageStatuses = new ArrayList<String>(); 
    messageStatuses.add("All"); 
    messageStatuses.add("Unread"); 
    messageStatuses.add("Read"); 

    _messageSpinner.setAdapter(new MessageStatusAdapter(messageStatuses)); 
} 

public class MessageStatusAdapter implements SpinnerAdapter 
    { 
     ArrayList<String> mMessageStatuses = new ArrayList<String>(); 
     LayoutInflater layoutInflater = getLayoutInflater(); 

     public MessageStatusAdapter(ArrayList<String> messageStatuses) 
     { 
      mMessageStatuses = messageStatuses; 
     } 

     @Override 
     public int getCount() 
     {      
      return mMessageStatuses.size(); 
     } 

     @Override 
     public Object getItem(int arg0) 
     { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public long getItemId(int arg0) 
     { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public int getItemViewType(int arg0) 
     { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      final TextView filterName; 

      if (convertView == null) { 
       filterName = (TextView) layoutInflater.inflate(R.layout.item_spinner_message_status, parent, false); 
      } else { 
       filterName = (TextView) convertView; 
      } 

      filterName.setText("StatusTest"); 
      return filterName; 
     } 

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

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

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

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

     } 

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

     } 

     @Override 
      public View getDropDownView(int position, View convertView, ViewGroup parent) { 
      final TextView filterName; 
      if (convertView == null) { 
       filterName = (TextView) layoutInflater.inflate(R.layout.item_spinner_message_status_dropdown, parent, false); 
       //filterName.setEllipsize(TruncateAt.END); 
      } else { 
       filterName = (TextView) convertView; 
      } 

      filterName.setText("DropDownItem"); 
      return filterName; 
      } 

    } 

item_spinner_message_status:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="10pt" 
    android:textColor="@color/text_gray" > 
</TextView> 

item_spinner_message_status_dropdown:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tvMessageStatusDropdown" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="10pt" 
    android:textColor="@color/text_gray" 
    android:height="50dp" 
    android:gravity="center_vertical" 
    android:padding="2dp" > 
</TextView> 

回答

0
_messageSpinner = (Spinner) findViewById(R.id.message_filter_spnStatus); 
String[] messageStatuses = { "All", "Unread", "Read" }; 
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, messageStatuses); 
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
_messageSpinner.setAdapter(dataAdapter); 

嘗試裏面你onCreate()

+0

恐怕你的食譜不起作用我希望它能起作用。我之前寫過,當用戶點擊微調器(而不是屏幕中心的「對話框」)時,我需要下拉列表。你使用哪個版本的sdk?我需要它在API 10及更高版本中工作。 – konunger

+0

我創建了一個簡單的應用程序,只有微調器和它的適配器。它的工作模式爲「fromthebox」,android從3.0或API 11開始。默認情況下,該項目包含文件夾「values-v11」和「values-v14」,均包含具有主題描述的文件「styles.xml」。可能有一些方法可以在android 2.3.3上應用這些主題? – konunger

+0

我讀過這篇文章[鏈接](http://stackoverflow.com/questions/14214001/spinner-showing-items-as-drop-down-list)作者建議使用庫提供HOLO主題API 7和更高,這裏是[鏈接](https://github.com/Prototik/HoloEverywhere)。這可能是一個解決方案。 – konunger

-1

您可以奧雅納此代碼段rride public boolean performClick() Spinner顯示ListPopupWindow的方法。這將顯示一個類似於ICS樣式微調器的下拉列表。

您可以使用ListPopupWindow對象的setAdapter方法來設置您的MessageStatusAdapter

您應該注意使用相關方法顯示和解除下拉列表,如ListPopupWindow對象的setOnItemSelectedListenersetOnItemClickListener

相關問題