Spinner讲解

AdapterView中我们常用【常用的adapterView的使用方式都是类似的,都是通过适配器来适配数据源,然后将适配器设置到adapterView上进行显示】:

    ListView:滑动列表。

    Spinner:下拉列表。

    GridView:网格图。

在这篇中我专门介绍一下Spinner:

 Spinner:用户选择列表,下拉列表。其内容是文本信息,常用ArrayAdapter来填充。

 两种为Spinner加载数据的方式:

1、在XML文件中定义数据资源,使用ArrayAdapter.createFromResource()方法把该资源加载进来。

2、直接在Java代码中使用setAdapter()方法。

代码实现:

显而易见,我们需要先设置一个Spinner控件。

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.textspinner.MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></Spinner>
</RelativeLayout>

MainActivity.java

private Spinner spinner;//adapterView
private ArrayAdapter<String> adapter;//适配器adapter
private List<String> list;//数据源

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //初始化
    spinner = (Spinner) findViewById(R.id.spinner);
    list = new ArrayList<String>();
    for (int i = 0; i < 10 ; i++){
        list.add("数据" + i);
    }
    adapter =  new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
    //设置适配器
    spinner.setAdapter(adapter);
}

接下来我们使用我们之前用过的string-array属性来完成,首先当然是在values中创建一个xml,我们将其命名为datalist。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="datalist">
        <item>北京</item>
        <item>上海</item>
        <item>广州</item>
        <item>深圳</item>
        <item>西安</item>
        <item>武汉</item>
        <item>郑州</item>
        <item>南京</item>
        <item>南阳</item>
    </string-array>
</resources>

接下来我们值需要在MainActivity.java中对其进行初始化以及设置。

private void initByXML() {
    adapterXML = ArrayAdapter.createFromResource(this,R.array.datalist,android.R.layout.simple_list_item_1);
    spinner.setAdapter(adapterXML);
}

运行结果:

我们考虑一下,除了这两种方式还有没有别的方法呢?

答案是肯定的,我们可以进入activity_main.xml中在<Spinner>标签中添加一个属性:

android:entries="@array/datalist"

在此android:entries = "array/datalist" : 表示下拉列表数据源集合。

那么为了确认我们可以设置当我们选中该项时,系统弹出已选中信息。我们可以添加这些步骤来完成:

首先我们在activity_main.xml中创建一个TextView标签用来显示提示信息:

<TextView
    android:text="TextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/spinner"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="107dp"
    android:id="@+id/spinner_tv" />

接下来肯定要在MainActivity.java中设置点击事件。

tv = (TextView) findViewById(R.id.spinner_tv);
//设置spinner的选中的item
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    //当AdapterView中的item被选中的时候执行的方法。
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        tv.setText(adapterXML.getItem(position));

    }

    @Override
    //未选中时的时候执行的方法
    public void onNothingSelected(AdapterView<?> parent) {

    }
});

此时一定要注意:activity_main.xml中的entries属性一定要删除,否则会出现错误【init初始化没有使用】。

运行结果:

发布了50 篇原创文章 · 获赞 37 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/m0_37868230/article/details/80958618