知方号

知方号

Android中Spinner的使用及其详细总结(可实现下拉列表)<安卓底部弹出框和spinner结合>

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

Spinner:可以理解为一个数据集合的菜单。

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

android:spinnerMode="dropdown"

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

android:spinnerMode="dialog"

定义数组资源的方法:

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

Spinner 安徽省 河北省 河南省 湖北省 湖南省

//获取资源文件,通过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

strings.xml

Spinner 安徽省 河北省 河南省 湖北省 湖南省

效果图:  

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 activity_main.xml 效果图:    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。