android 2.3.3及更高版本中spinner的下拉模式

android 2.3.3及更高版本中spinner的下拉模式,android,android-spinner,Android,Android Spinner,大家好! 我浏览了关于这个问题的其他问题,但没有找到一个全面的答案。所以,我再问一次。我的应用程序必须在android 2.3.3及更高版本上运行。我有一个微调器和适配器,用于通过它显示数据。我想在用户点击微调器时以下拉方式显示数据列表。我真的不明白我该如何做到这一点 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _messageSpi

大家好! 我浏览了关于这个问题的其他问题,但没有找到一个全面的答案。所以,我再问一次。我的应用程序必须在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;
          } 

    }
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
_messageSpinner=(Spinner)findViewById(R.id.message\u filter\u spnStatus);
ArrayList messageStatuses=新建ArrayList();
messageStatuses.add(“全部”);
messageStatuses.add(“未读”);
messageStatuses.add(“Read”);
_setAdapter(新的MessageStatusAdapter(messageStatuses));
}
公共类MessageStatusAdapter实现SpinnerAdapter
{
ArrayList mmessagentatuses=新的ArrayList();
LayoutInflater LayoutInflater=getLayoutInflater();
public MessageStatusAdapter(ArrayList messageStatuses)
{
mMessageStatuses=消息状态;
}
@凌驾
public int getCount()
{                       
返回mmessagentatuses.size();
}
@凌驾
公共对象getItem(int arg0)
{
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int arg0)
{
//TODO自动生成的方法存根
返回0;
}
@凌驾
public int getItemViewType(int arg0)
{
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终文本视图过滤器名称;
if(convertView==null){
filterName=(TextView)LayoutFlater.inflate(R.layout.item\u spinner\u message\u status,parent,false);
}否则{
filterName=(TextView)convertView;
}
filterName.setText(“状态测试”);
返回过滤器名称;
}
@凌驾
public int getViewTypeCount()
{
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共布尔表ID()
{
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔值为空()
{
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共无效注册表DataSetObserver(DataSetObserver arg0)
{
//TODO自动生成的方法存根
}
@凌驾
public void unregisterDataSetObserver(DataSetObserver arg0)
{
//TODO自动生成的方法存根
}
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
最终文本视图过滤器名称;
if(convertView==null){
filterName=(TextView)LayoutFlater.inflate(R.layout.item\u微调器\u消息\u状态\u下拉列表,父级,false);
//过滤名称。设置椭圆化(TruncateAt.END);
}否则{
filterName=(TextView)convertView;
}
filterName.setText(“下拉项”);
返回过滤器名称;
} 
}
项目\微调器\消息\状态:

<?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>

项目\微调器\消息\状态\下拉列表:

<?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>

\u messageSpinner=(Spinner)findViewById(R.id.message\u filter\u spnStatus);
字符串[]消息状态={“全部”、“未读”、“已读”};
ArrayAdapter dataAdapter=新的ArrayAdapter(上下文、android.R.layout.simple\u微调器\u项、消息状态);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
_messageSpinner.setAdapter(dataAdapter);

在您的
onCreate()

中尝试此代码段。您可以覆盖微调器的
public boolean performClick()
方法以显示
ListPopupWindow
。这将显示一个类似于ICS样式微调器的下拉列表

您可以使用
ListPopupWindow
对象的
setAdapter
方法设置
MessageStatusAdapter


您应该注意使用相关方法显示和取消下拉列表,如ListPopupWindow对象的
setOnItemSelectedListener
setOnItemClickListener

恐怕您的配方不起作用,我希望它起作用。我之前写过,当用户点击微调器(而不是屏幕中央的“对话框”)时,我需要下拉列表。您使用哪个版本的sdk?我需要它在API 10和更高版本中工作。我已经创建了一个只有spinner和它的适配器的简单应用程序。它以下拉模式“fromthebox”工作,android从3.0或API 11开始。默认情况下,此项目包含文件夹“values-v11”和“values-v14”,这两个文件夹都包含具有主题描述的文件“styles.xml”。也许有什么方法可以将这些主题应用到android 2.3.3上?我读了这篇文章,作者建议使用在API 7和更高版本上提供全息主题的库,在这里。这可能是一个解决办法。
_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);