android实践项目七自定义的Spinner

程序实现的效果
如下
话不多说先上子布局

<?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>  

构造一个peeson类来封装数据

package com.example.demotest;

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;  
    }  

}  

再来写最重要的数据适配器(自定义组件的核心)

package com.example.demotest;

 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;  

public class MySpinnerAdapter extends BaseAdapter {  
    private List<Person> mList;  
    private Context mContext;  

    public MySpinnerAdapter(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.spinner3, 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;  
    }  
}  

看重写的getview方法用布局构建器加载子布局在实例化自布局里面的Textview 表示还可以用viewholder优化

最后再看主要的活动

package com.example.demotest;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;

public class SpinnerTest extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spinner4);
        Spinner mSpinner = (Spinner) findViewById(R.id.spinnertest);
        // 建立数据源
        List<Person> persons = new ArrayList<Person>();
        persons.add(new Person("张三", "上海 "));
        persons.add(new Person("李四", "上海 "));
        persons.add(new Person("王五", "北京"));
        persons.add(new Person("赵六", "广州 "));
        // 建立Adapter绑定数据源
        MySpinnerAdapter _MyAdapter = new MySpinnerAdapter(this, persons);
        // 绑定Adapter
        mSpinner.setAdapter(_MyAdapter);
    }
}

代码很简单 初始化控件 和数据 再给Spinner加载适配器就好了

主布局文件就只是一个Spinner

<?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" >  

 <Spinner 
     android:id="@+id/spinnertest"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:spinnerMode="dialog"
     />

</LinearLayout>  

Spinner的弹出属性在android:spinnerMode中设置
很简单的案例 看完跑一遍吧~

posted @ 2016-04-20 16:19  Tesi1a  阅读(116)  评论(0编辑  收藏  举报