Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

public class MySpinnerActivity extends Activity {
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

spinner = (Spinner)findViewById(R.id.spCitys);

spinner.setAdapter(new MyAdapter(this));//要绑定的适配器,上面spinner要显示的数据及样子全部由MyAdapter来处理
}
}

public class MyAdapter extends BaseAdapter{
private List citys;
private Context context;

public MyAdapter(Context context) {
citys = new ArrayList();//此处数据源一般是从网络上得的,此处直接写一些死数据
citys.add("上海");
citys.add("北京");
citys.add("武汉");
this.context = context;
}

@Override
public int getCount() {//有几条数据呢?
return citys.size();
}

@Override
public Object getItem(int position) {//当前这一项是什么呢
return citys.get(position);
}

@Override
public long getItemId(int position) {//这一项的位置对应的ID是什么
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {//如果要绑定还有界面的样式,就得重写
//int position,所点击的成员索引,convertView,当前的控件,指的是就小界面,此处是main_item.xml
//如何加载不是本页面设定的界面layout(在A界面上加载B界面上的控件)
//布局加载器
LayoutInflater infalter = LayoutInflater.from(context);//实例化
//加载
convertView = infalter.inflate(R.layout.main_item, null);//加载要设置信息的小界面

//怎么实例化imageview,textview
ImageView iv = (ImageView)convertView.findViewById(R.id.imageView1);
TextView tv = (TextView)convertView.findViewById(R.id.textView1);

//设置图片和数据
tv.setText(citys.get(position).toString());
iv.setImageResource(R.drawable.w);
return convertView;
}

}

今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现)

(一):使用ArrayAdapter进行适配数据:

①:首先定义一个布局文件:

?


1

2

3

4

5

6

7

8

9

10

11

12

<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <Spinner

        android:id="@+id/spinner1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

      />

</LinearLayout></span>

  【注意:】上面的Spinner有两个属性1:prompt是初始的时候,Spinner显示的数据,是一个引用类型   2:entries是直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定) 

②:建立数据源,使用数组,这些数据将会在Spinner下来列表中进行显示:

?


1

2

3

4

5

6

7

8

9

<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>

<resources>

    <string-array name="spinnername">

        <item>北京</item>

        <item>上海 </item>

        <item>广州</item>

        <item>深圳</item>

    </string-array>

</resources></span>

③:接着在Activity中加入如下的代码(使用了系统定义的下拉列表的布局文件,当然也可以自定义)

?


1

2

3

4

5

6

7

8

       // 初始化控件

mSpinner = (Spinner) findViewById(R.id.spinner1);

// 建立数据源

String[] mItems = getResources().getStringArray(R.array.spinnername);

// 建立Adapter并且绑定数据源

ArrayAdapter<String> _Adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);

//绑定 Adapter到控件

mSpinner.setAdapter(_Adapter);

以上代码初步完成,看下运行效果:

下面是关于Spinner的点击事件(效果图如上图):

?


1

2

3

4

5

6

7

8

9

10

11

12

mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override

    public void onItemSelected(AdapterView<?> parent, View view,

            int position, long id) {

        String str=parent.getItemAtPosition(position).toString();

        Toast.makeText(SpinnerActivity.this"你点击的是:"+str, 2000).show();

    }

    @Override

    public void onNothingSelected(AdapterView<?> parent) {

        // TODO Auto-generated method stub

    }

});

       (二)使用自定义的Adapter(重点)

①:定义每一个Item的布局文件

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<?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:drawableLeft="@drawable/ic_launcher"

        android:paddingRight="8dip"

        android:paddingTop="8dip"

        android:text="TextView"

        android:textSize="25sp" />

    <TextView

        android:id="@+id/textView2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:paddingLeft="8dip"

        android:paddingTop="8dip"

        android:text="TextView"

        android:textSize="25sp" />

</LinearLayout>

②:建立Person类:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package com.jiangqq.csdn;

public class Person {

    private String personName;

    private String personAddress;

    public Person(String personName, String personAddress) {

        super();

        this.personName = personName;

        this.personAddress = personAddress;

    }

    public String getPersonName() {

        return personName;

    }

    public void setPersonName(String personName) {

        this.personName = personName;

    }

    public String getPersonAddress() {

        return personAddress;

    }

    public void setPersonAddress(String personAddress) {

        this.personAddress = personAddress;

    }

}

③:创建MyAdapter继承与BaseAdapter,进行适配:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

package com.jiangqq.csdn;

import java.util.List;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

/**

 * 自定义适配器类

 * @author jiangqq  <a href=http://blog.csdn.net/jiangqq781931404></a>

 *

 */

public class MyAdapter extends BaseAdapter {

    private List<Person> mList;

    private Context mContext;

    public MyAdapter(Context pContext, List<Person> pList) {

        this.mContext = pContext;

        this.mList = pList;

    }

    @Override

    public int getCount() {

        return mList.size();

    }

    @Override

    public Object getItem(int position) {

        return mList.get(position);

    }

    @Override

    public long getItemId(int position) {

        return position;

    }

    /**

     * 下面是重要代码

     */

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);

        convertView=_LayoutInflater.inflate(R.layout.item, null);

        if(convertView!=null)

        {

            TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);

            TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);

            _TextView1.setText(mList.get(position).getPersonName());

            _TextView2.setText(mList.get(position).getPersonAddress());

        }

        return convertView;

    }

}

④:在Activity中加入如下代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

       // 初始化控件

mSpinner = (Spinner) findViewById(R.id.spinner1);

// 建立数据源

List<Person>  persons=new ArrayList<Person>();

persons.add(new Person("张三""上海 "));

persons.add(new Person("李四""上海 "));

persons.add(new Person("王五""北京" ));

persons.add(new Person("赵六""广州 "));

//  建立Adapter绑定数据源

MyAdapter _MyAdapter=new MyAdapter(this, persons);

//绑定Adapter

mSpinner.setAdapter(_MyAdapter);

运行效果如下截图:

时间: 2024-10-13 00:22:22

Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)的相关文章

【转】Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

原文网址:http://embed.21ic.com/software/android/201403/31603.html 1 :Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) . 今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAdapter进行适配数据: ①:首先定义一个布局文件: android:

[转]Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAdapter进行适配数据: ①:首先定义一个布局文件: 1 <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?> 2 <LinearLayo

Android中的下拉列表

在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可.这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner. 方法一: 以资源方式,静态展示 Spinner 选项: <Spinner android:layout_width="match_parent" android:layout_height="wrap_conte

【Android UI】ListView系列二(自定义Adapter订阅新闻栏目)

目标:自定义适配器Adapter实现点击每个item订阅按钮 上一篇介绍了listview的基本属性以及ArrayAdapter和SimpleAdapter的简单实用,链接:listview使用方式基础篇. 今天主要介绍一下自定义adapter,来实现稍微复杂点的功能,今天实现的效果是:类似于listiew展示许多可供订阅的栏目,每个栏目最右端有订阅按钮,用户点击订阅可以订阅该栏目,再次点击可取消订阅,效果图如下,下面我们一步步来实现. 1. 定义主布局文件activity_main.xml 主

Android中Spinner的使用

本博文介绍了基本的Spinner的使用方法 首先写一下xml中的代码部分 <Spinner      android:id="@+id/myspinner"     android:layout_width="fill_parent"     android:layout_height="wrap_content"     /> 再写一下Strings.xml中 的文件部分 <string-array          name

android 中使用回调方法(适用于自定义view传值到activity、adapter传值到activity)

如图所示: 每当listview中有选中的操作时都需要发消息给activity,用来实时改变真实需要支付的剩余金额. 代码暂不公开啦!公司项目!

Android之Socket通信、List加载更多、Spinner下拉列表

Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过建立socket连接,可为通信双方的数

Android中自定义视图View之---进阶篇(Canvas的使用)

更多技术内容请移步:我的个人博客 一.前言 今天是周日,昨天刚刚写完了一篇关于如何搭建LNMP环境,让自己可以DIY有个性的个人主页: http://blog.csdn.net/jiangwei0910410003/article/details/50929955 那么今天,我们继续来看一篇关于Android中的UI篇,如何自定义视图View的进阶篇,关于前奏篇之前已经写过了,还没有了解的同学可以去看看:http://blog.csdn.net/jiangwei0910410003/articl

Android中自定义视图View之---前奏篇

前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用到一些自定义的View以达到我们所需要的效果.其实网上的很多案例我们看完之后,发现这部分没什么难度的,我总结了两点: 1.准备纸和笔,计算坐标 2.在onDraw方法中开始画图,invalidate方法刷新,onTouchEvent方法监听触摸事件 对于绘图相关的知识,之前在弄JavaSE相关的知识的时候,