Android 控件:使用下拉列表框--Spinner

---恢复内容开始---

一、前段代码

<Spinner
    android:id="@+id/spin"
    android:paddingTop="10px"
    android:layout_width="fill_parent"
    android:layout_height="50sp"/>

<Button
    android:id="@+id/addList"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="添加" />

二、接下来新建一个下拉列表的视图资源,即每个Item的TextView,我们把它命名为dropdown.xml,我们把它放到drawable中,代码为:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv1"
    android:layout_width="fill_parent"
    android:layout_height="20sp"
    android:singleLine="true"
    style="?android:attr/spinnerDropDownItemStyle"
    />

三、创建Adapter

这里介绍下两个函数:

1.ArrayAdapter.ArrayAdapter(Context context,int textViewResourcId,List<String> objects)

我们可以通过它创建新的Adapter对象,这里需要三个参数:

(1)context上下文关系,就是这个Adapter属于哪个Activity,属于哪个应用程序。

(2)textViewResourcId TextView的资源id

 (3)  最后一个参数是你要向下拉列表中添加的数据,可以是一个静态的String数组,也可以是一个动态的List<String>;

2.AdapterView.setOnItemSelectedListener(OnItemSelectedListener listener),使用这个方法为Spinner对象设置监听器。这里参数是OnItemSelectedListener 接口,实现这个接口需要重写两个方法:

(1)public void onItemSelected(AdapterView<?> parent, View view,int position, long id) 

这个方法中可以完成当选项被选中时要做的处理。四个参数的含义:

  • AdapterView<?> parent,这个类似context,只是范围比较下,指你当前操作的AdapterView
  • View view ,这个参数是你具体单击的那个TextView对象
  • int position 这个参数的意思是你单击的那个view在整个AdaterView中的位置
  • long id 单击view的id

(2)public void onNothingSelected(AdapterView<?> parent) 

这个回调函数在AdapterView中没有选项时调用。

完整代码如下:

    private Spinner spinner;
    private TextView tv;
    private ArrayAdapter<String> adapter;
    private static final String[] years = { "小于1年", "1年-3年", "3年-5年", "5年以上" };
    private ArrayList<String> array = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
        spinner = (Spinner) findViewById(R.id.spin);

        tv = (TextView) findViewById(R.id.textView1);

        for (int i = 0; i < years.length; i++) {
            array.add(years[i]);
        }
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, array);
        adapter.setDropDownViewResource(R.drawable.dropdown);
        
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO 自动生成的方法存根
                String seleted = array.get(position);
                tv.setText(seleted);
                parent.setVisibility(View.VISIBLE);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO 自动生成的方法存根
                tv.setText("您没有选择");
            }

        });

---恢复内容结束---

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

不规则图形的碰撞检测

public static class CheckHit { public static bool CheckCollision(FrameworkEl...

15910
来自专栏Android小菜鸡

自定义广告图片轮播View——CarouselView

  因为一个广告机的需求,需要做一个广告轮播的效果,不需要什么特别的动画,正常的轮播就可以了。笔者看了网上很多文章,要么不好用,要么就是效果太多,太复杂,用不上...

642
来自专栏项勇

笔记21 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(二)

1097
来自专栏Android中高级开发

Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

741
来自专栏分享达人秀

自定义BaseAdapter

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用...

1968
来自专栏后端之路

android 壁纸设置分析

最近组织上派遣了我一个任务,最终目的只有一个,就是看看launcher你的wallpaper设置的流程。 废话不多说,直接看源码。 tips:在com.andr...

1897
来自专栏Android开发指南

2.抽取代码(BaseActivity)

3428
来自专栏Android干货园

Android谈谈封装那些事--BaseActivity和BaseFragment(一)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/53...

723
来自专栏MelonTeam专栏

使用Anko Layouts来开发Android ( 翻译)

导语: Kotlin现在已成为Android的另一官方语言。JetBrains针对Android开发者也推出了一些有用的库和工具。Anko Layouts是使用...

2537
来自专栏向治洪

listview优化(中)

1,对Imageview使用setTag()方法来解决图片错位问题,这个Tag中设置的是图片的url,然后在加载的时候取得这个url和要加载那position...

18910

扫描关注云+社区