Android之Spinner的功能和用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27384607/article/details/47152521

Spinner组件与Swing编程的Spinner不同,此处Spinner其实就是一个列表选择框。不过android的列表框并不是显示下拉列表的,而是相当于弹出一个菜单供用户选择

Spinner是ViewGroup的间接子类,因此它也可作为容器使用,spinner支持以下的XML属性

1.android:prompt :设置该列表选择框的提示

2.android:entries : 使用数组资源设置该下拉列表框的列表项目

如果开发者使用spinner时已经可以确定下拉列表框的列表项,则完全不需要编写代码,只要为Spinner指定android:entries属性即可实现一个下拉列表框,如以下界面布局文件所示。

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Spinner 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/books"/>

</LinearLayout>
</span>

上面的界面布局文件中使用@array/books指定数组资源,因此我们需要在res/value目录下使用XML文件来定义一份数组资源该数组资源文件的内容如下:

<span style="font-size:18px;"></span><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array 
        name="books">
        <item >疯狂java讲义</item>
        <item >疯狂XML讲义</item>
        <item >疯狂Android讲义</item>
        
    </string-array>
    
</resources>


 
 使用Activity显示上面的布局,将看到以下的界面 
 

当然上面的界面布局文件也可以不使用@array/books指定数组资源,我们可以建立adapter来做。

步骤如下:

1.建立数据源(这里就不适用上面的@array/books来指定数组资源了)

2.建立adapter,并连接数据源

3.绑定的UI组件

布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Spinner                                                 //新建一个Spinner组件,没有指定<span style="font-size: 18px;">android:entries 属性</span>
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

java文件

package com.example.spinner;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.os.Build;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        showSpinner();
    }
    private void showSpinner() {
    	Spinner spinner = (Spinner)findViewById(R.id.spinner);
    	//1.建立数据源
    	String[] string = new String[] {"谢先生","王先生","李先生"};
    	//2.建立adapter,并连接数据源
    	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, string);
    	//3.绑定的UI组件
    	spinner.setAdapter(adapter);
    }
}
好了,看下面的效果图吧(就是这么简单)


当然,一行中不可能只有一个数据,比如一行中包括了姓名和和居住地(比如还价格图片什么的),如下图


这时我们就不能用系统的Adapter了,比如上面用的就是系统的ArrayAdapter来实现功能的,现在我们自己定义一个adapter,这样的好处是用起来更灵活了

1.首先用一个类User来定义我们的数据(姓名(name)和居住地(address))

User.java

package com.example.spinner;

public class User {
	private String name;
	private String address;
	
	public User(String username,String useraddress) {
		name = username;
		address = useraddress;
		
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	

}

2.用一个user_item来存放我们的User数据

usr=er_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:layout_marginLeft="10dip"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dip"
        android:textSize="20sp"
        android:text="TextView" />

</LinearLayout>
3.定义我们自己的基础适配器(adapter)

UserAdapter.java

package com.example.spinner;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class UserAdater extends BaseAdapter {
	List<User> muser;
	Context mcontext;
	public UserAdater(List<User> username,Context context) {
		muser = username;
		mcontext = context;		
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return muser.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return muser.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	@Override
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		arg1 = LayoutInflater.from(mcontext).inflate(R.layout.userlayout,null);
		TextView textview1 = (TextView)arg1.findViewById(R.id.textView1);
		TextView textview2 = (TextView)arg1.findViewById(R.id.textView2);
		textview1.setText(muser.get(arg0).getName());
		textview2.setText(muser.get(arg0).getAddress());
		return arg1;
	}
	

}

在主类中实现它,还是以下几个步骤:

1.建立数据源(这里就不适用上面的@array/books来指定数组资源了)

2.建立adapter,并连接数据源

3.绑定的UI组件

上面已经讲过了

MainActivity.java

package com.example.spinner;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.os.Build;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
//      showSpinner();
        showSpinner2();
    }
//    private void showSpinner() {
//    	Spinner spinner = (Spinner)findViewById(R.id.spinner);
//    	//1.建立数据源
//    	String[] string = new String[] {"谢先生","王先生","李先生"};
//    	//2.建立adapter,并连接数据源
//    	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, string);
//    	//3.绑定的UI组件
//    	spinner.setAdapter(adapter);
//    }
    private void showSpinner2() {
    	Spinner spinner = (Spinner)findViewById(R.id.spinner);
    	//1.建立数据源
    	ArrayList<User> user = new ArrayList<User>();
    	//添加数据
    	user.add(new User("谢小青", "广东徐闻"));
    	user.add(new User("谢小黄", "广东徐闻"));
    	user.add(new User("谢小绿", "广东徐闻"));
    	user.add(new User("谢小红", "广东徐闻"));
    	user.add(new User("谢小黑", "广东徐闻"));
    	//2.建立adapter,并连接数据源
    	UserAdater useradater = new UserAdater(user, this);
    	//3.添加到UI
    	spinner.setAdapter(useradater);
    }
}

虽然界面看起来不美观,但是基本功能都实现了,大家参考参考。

猜你喜欢

转载自blog.csdn.net/qq_27384607/article/details/47152521