Android中Spinner的使用及其详细总结(可实现下拉列表)

来源:互联网 发布:java asm问题处理 编辑:程序博客网 时间:2024/06/05 10:42
Spinner:可以理解为一个数据集合的菜单。

Spinner如果不设置模式,默认采用下拉列表的模式即

android:spinnerMode="dropdown"


也可自己设置为dialog模式显示

android:spinnerMode="dialog"


定义数组资源的方法:

1.数组资源定义在values/arrays.xml中(一般用于资源为固定的,只能通过升级软件来改变数组资源)。通过xml中给Spinner添加android:entries属性绑定;或者通过在java代码中getResources().getStringArray()来获取(通过R.array.+资源数组名):

<resources>    <string name="app_name">Spinner</string>    <string-array name="province">        <item>安徽省</item>        <item>河北省</item>        <item>河南省</item>        <item>湖北省</item>        <item>湖南省</item>    </string-array></resources>


<Spinner    android:entries="@array/province"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/spinner"    android:layout_centerInParent="true"    android:layout_marginTop="64dp"/>


//获取资源文件,通过array资源获取name为province的数组

String[] stringArray = getResources().getStringArray(R.array.province);


2.在java代码中添加数组资源,直接采用赋值的形式,然后用到时引用就行(一般用于数据经常变动时,可以通过网络请求数据)。

private String[] province = {"安徽省","河北省","河南省","湖北省","湖南省"};


Spinner实现方法:
方法一(最简单的,使用默认的适配器):
1.先拖进去一个Spinner控件
2.在strings资源文件中,添加一个string-array数组,但是,这个数组要给name标签。
3.在Spinner控件中添加entries属性,使用@array/name的方式,加载定义好的数组,或者获取string—array的数组资源

方法二(最常用的,自己定义适配器):
1.先拖进去一个Spinner控件
2.获取数组资源(同上)
3.自定义适配器
4.设置适配器到Spinner控件上


Spinner实现之方法一:

MainActivity.java

public class MainActivity extends AppCompatActivity {    private Spinner spinner;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        spinner = (Spinner) findViewById(R.id.spinner);//        //获取资源文件,通过array资源获取name为province的数组//        String[] stringArray = getResources().getStringArray(R.array.province);//        spinner = (Spinner) findViewById(R.id.spinner2);//        //新建一个数组适配器ArrayAdapter设置三个参数:上下文,下拉列表的样式,数据源//        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, stringArray);//        //将适配器设置给Spinner//        spinner.setAdapter(adapter);           //设置item的被选择的监听        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {            //当item被选择后调用此方法            @Override            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {            //获取我们所选中的内容            String s = parent.getItemAtPosition(position).toString();            //弹一个吐司提示我们所选中的内容            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();            }            //只有当patent中的资源没有时,调用此方法            @Override            public void onNothingSelected(AdapterView<?> parent) {            }        });    }}


activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.zhiyuan3g.spinner.MainActivity"><!--注意entries属性,是添加资源,这样java代码中就不需要进行添加资源的操作。当然,你也可以在java代码中做添加资源的操作-->    <Spinner        android:entries="@array/province"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/spinner"        android:layout_centerInParent="true"        /></RelativeLayout>


strings.xml

<resources>    <string name="app_name">Spinner</string>    <string-array name="province">        <item>安徽省</item>        <item>河北省</item>        <item>河南省</item>        <item>湖北省</item>        <item>湖南省</item>    </string-array></resources>



效果图:

 

Spinner实现之方法二:

MainActivity.javapackage com.zhiyuan3g.spinner;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.Spinner;import android.widget.Toast;import com.zhiyuan3g.spinner.adapter.MyAdapter;public class MainActivity extends AppCompatActivity {    private Spinner spinner;    //定义了两个数组,一个存放图片,一个存放省份    private int[] image = {R.drawable.anhui, R.drawable.hebei,            R.drawable.henan, R.drawable.hubei, R.drawable.hunan};    private String[] province = {"安徽省","河北省","河南省","湖北省","湖南省"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        //控件初始化        spinner = (Spinner) findViewById(R.id.spinner);        //自定义适配器,将其设置给spinner        spinner.setAdapter(new MyAdapter(image,province,this));        //设置监听        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {            //当item被选择后调用此方法            @Override            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                //获取我们所选中的内容                String s = province[position];                //弹一个吐司提示我们所选中的内容                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();            }            //只有当patent中的资源没有时,调用此方法            @Override            public void onNothingSelected(AdapterView<?> parent) {            }        });    }}

MyAdapter.javapackage com.zhiyuan3g.spinner.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.zhiyuan3g.spinner.R;public class MyAdapter extends BaseAdapter {    private int[] image;    private String[] province;    private Context context;    private ViewHolder mViewHolder;    /**     * function:通过构造方法传递数据     * @param image:图片数据     * @param province:省份数据     * @param context:上下文     */    public MyAdapter(int[] image, String[] province, Context context) {        this.image = image;        this.province = province;        this.context = context;    }    //item的总长度    @Override    public int getCount() {        return image.length;    }    //获取item的标识    @Override    public Object getItem(int position) {        return position;    }    //获取item的id    @Override    public long getItemId(int position) {        return position;    }    //获取item视图    @Override    public View getView(int position, View convertView, ViewGroup parent) {        //判断是否有可复用的view对象,没有的话走if,有的话走else        if (convertView==null){            //找到我们自定义的行布局            convertView = View.inflate(context, R.layout.layout_item, null);            //实例化ViewHolder内部类            mViewHolder = new ViewHolder();            //给ViewHolder里的控件初始化,通过我们自定义的行布局            mViewHolder.picture = (ImageView) convertView.findViewById(R.id.picture_img);            mViewHolder.province = (TextView) convertView.findViewById(R.id.province_tv);            //给convertView设置一个标签            convertView.setTag(mViewHolder);        }else {            //获取我们设置过的标签,实现复用convertView            mViewHolder = (ViewHolder) convertView.getTag();        }        //分别给每个控件设置相应的内容        mViewHolder.province.setText(province[position]);        mViewHolder.picture.setImageResource(image[position]);        //返回convertView对象        return convertView;    }    //新建ViewHolder内部类,用来定义我们行布局中所用到的控件    class ViewHolder{        private ImageView picture;        private TextView province;    }}

layout_item.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="horizontal"              android:layout_width="match_parent"              android:layout_height="match_parent"><ImageView    android:layout_width="wrap_content"    android:id="@+id/picture_img"    android:layout_height="wrap_content"/><TextView    android:layout_width="wrap_content"    android:id="@+id/province_tv"    android:layout_marginTop="10dp"    android:layout_height="wrap_content"/></LinearLayout>

activity_main.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.zhiyuan3g.spinner.MainActivity"><!--注意entries属性,是添加资源,这里我们不用,而是在代码中添加-->    <Spinner        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/spinner"        android:layout_centerInParent="true"        /></RelativeLayout>



效果图:

 

 


0 0