控件入门之Listview

一、简单的适配器填充方式。

在listview中,需要添加适配器对listview进行填充

首先声明listview和适配器:

	private ListView listView;
	private ArrayAdapter<String> adapter;
然后绑定布局,在布局中寻找listview对象,绑定适配器:

        adapter =new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,getDate());
        listView.setAdapter(adapter);
使用ArrayAdapter,传入String内容,

    public ArrayAdapter(Context context, int resource, List<T> objects) {
        init(context, resource, 0, objects);
    }
arrayAdapter的源码可以看出需要传入三个参数,第一个是context,这里传入this,第二个参数是listItem的主题类型,第三个就是数据资源,新建yigegetDate方法,

创建一个List<String>对象,返回一个list,也可以是ArrayList<>。

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

import android.R.anim;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ListView listView;
	private ArrayAdapter<String> adapter;
	
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView=(ListView)this.findViewById(R.id.listView1);
        adapter =new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,getDate());
        listView.setAdapter(adapter);
  }


public List<String>  getDate(){
	List<String> list2=new ArrayList<String>();
	for (int i = 0; i <25; i++) {
		list2.add("BOB"+i);
		
	}
	return list2;
}

}
二、BaseAdapter适配器写入数据

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

import android.R.integer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
private ListView listView;
private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView=(ListView)this.findViewById(R.id.listView1);
        adapter = new MyAdapter(getdata());               //实例化adapter
        listView.setAdapter(adapter);             //给listvVew绑定adapter
       
    }
    
    
    public List<String> getdata(){
    	List<String> list= new ArrayList<String>();
    	for (int i = 1; i <=25; i++) {
			list.add("Syber"+i);
		}
    	return list;
    }

    public class MyAdapter extends BaseAdapter{
                            
    	//一个基本的Base适配器拥有以下四个属性
    	
    	private List<String> list;               //传一个String list 并在下面将参数本地化
    	


    	public MyAdapter(List<String> list){                                   //定义MyAdapter的方法
    		this.list=list;
    	}
		
		@Override
		public int getCount() {
			// TODO Auto-generated method stub                  //得到适配器的个数
			return list.size(); 
		}

		@Override
		public Object getItem(int position) {                   //获取数据的位置上的数据
			// TODO Auto-generated method stub
			return list.get(position);
		}

		@Override
		public long getItemId(int position) {                            //获取ID  即位置
			// TODO Auto-generated method stub 
			return position;
		}

		    //这个convertView其实就是 当ListView滑动的过程中 会有item被滑出屏幕,这时候Android会回收这个条目的view 即为convertView

//当item1被移除屏幕的时候 我们会重新new一个View给新显示的item_new 而如果使用了这个convertView 我们其实可以复用它 这样就省去了new View的大量开销
		public View getView(int position, View arg0, ViewGroup arg1) {
                 
			View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_style, null);  //绑定布局的方法设置View
			TextView textView=(TextView)view.findViewById(R.id.textView1);   
			textView.setText(list.get(position));                    //为textView添加内容
			System.out.println("--->>"+position);
			return view;
		}
    	
    }

}
在BaseAdapter中声明一个参数传入的方法(和Adapter同名):

    	public MyAdapter(List<String> list){                                
    		this.list=list;
    	}
<pre name="code" class="java">        adapter = new MyAdapter(getdata());              
       listView.setAdapter(adapter);  


 在实例化adapter的时候,传入数据源作为参数进入方法。 
 

在重载adapter的时候,要重载四个方法,getCount返回item的个数,getItem返回指定position的资源,getItemId返回position,以及最关键的get View

			View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_style, null); 
			TextView textView=(TextView)view.findViewById(R.id.textView1);   
			textView.setText(list.get(position));      
			System.out.println("--->>"+position);
			return view;
这里使用到inflater工具,载入一个item布局,并且为布局中的textview添加文字,最后返回view。


三、用ItemHolder来控制item样式。

首先新建一个itemholderclass,声明需要的text和view对象,然后为对象分别创建set和get方法,以备后面所需。

import android.widget.ImageView;
import android.widget.TextView;

public class ItemHodlerWithTextTextImageClass {
    TextView text1 = null;
    TextView text2 = null;
    ImageView imageView = null;
	public TextView getText1() {
		return text1;
	}
	public void setText1(TextView text1) {
		this.text1 = text1;
	}
	public TextView getText2() {
		return text2;
	}
	public void setText2(TextView text2) {
		this.text2 = text2;
	}
	public ImageView imageView() {
		return imageView;
	}
	public void setImageView(ImageView imageView) {
		this.imageView = imageView;
	}
}

其次在listview的主类中,创建一个数据类型子类,也用get和set方法。

	public class TextText	{

		String suggest = null;
		String date = null;
		public String getSuggest() {
			return suggest;
		}
		public void setSuggest(String suggest) {
			this.suggest = suggest;
		}
		public String getDate() {
			return date;
		}
		public void setDate(String date) {
			this.date = date;
		}
	}
创建数据资源方法,ayyryList中载入刚才的TextText类型数据,循环加载并返回list.

	private ArrayList<TextText> setListviewData2(){

		ArrayList<TextText> ls2 = new ArrayList<TextText>();
		for (int i = 1; i < 8; i++) {
			TextText TextText2 = new TextText();
			TextText2.setSuggest("维修建议"+i);
			TextText2.setDate("2015-09-"+i);
			ls2.add(TextText2);
			Log.i(TAG,"listcount");
		}
		return ls2;
	}
也可以将list的内容一项一项的创建,并返回list:

	private ArrayList<TextText> setListviewData3(){
		ArrayList<TextText> ls3 = new ArrayList<TextText>();
		TextText distance = new TextText();
		distance.setSuggest("保养里程");
		distance.setDate("5000KM");
		ls3.add(distance);

		TextText time = new TextText();
		time.setSuggest("保养时间");
		time.setDate("2015-09-24");
		ls3.add(time);

		TextText store = new TextText();
		store.setSuggest("保养4S店");
		store.setDate("4S店1");
		ls3.add(store);
		
		TextText cost = new TextText();
		cost.setSuggest("保养费用");
		cost.setDate("500元");
		ls3.add(cost);

		TextText maintain_count = new TextText();
		maintain_count.setSuggest("保养项目");
		maintain_count.setDate("");
		ls3.add(maintain_count);

		return ls3;
	}
接下来就要创建适配器,继承自BaseAdapter:
	private class MyListViewAdapter3 extends BaseAdapter {

		private ArrayList<TextText> ls = null;
		private Context mContext;

		public MyListViewAdapter3(Context context, ArrayList<TextText> _ls3) {
			mContext = context;
			ls = _ls3;
		}

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

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

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

		@SuppressLint("InflateParams")
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			ItemHodlerWithTextTextImageClass itemHolder = null;
			if (null == convertView) {
				itemHolder = new ItemHodlerWithTextTextImageClass();
				convertView = LayoutInflater.from(mContext).inflate(R.layout.itemholder_text_text_image3, null);
				itemHolder.setText1((TextView)convertView.findViewById(R.id.itemholder_text_text_image3_one));
				itemHolder.setText2((TextView)convertView.findViewById(R.id.itemholder_text_text_image3_two));
				convertView.setTag(itemHolder);
			} else {
				itemHolder = (ItemHodlerWithTextTextImageClass)convertView.getTag();
			}
			itemHolder.getText1().setText(ls.get(position).getSuggest());
			itemHolder.getText2().setText(ls.get(position).getDate());
			return convertView;
		}
	}
和第二种类型一样,写好数据传入的接口:
		public MyListViewAdapter3(Context context, ArrayList<TextText> _ls3) {
			mContext = context;
			ls = _ls3;
		}
在getView的方法的时候实例化一个itemholder,当convertView为空即没有创建的时候,载入一个item样式的布局文件,并将holder的setText与布局中相应的textview绑定,最后getText与ls中相应位置的相应数据一一对应传入,返回convertview。

ListView list3 = (ListView)view.findViewById(R.id.maintain_service_register_listview);
		MyListViewAdapter3 myAdapter3 = new MyListViewAdapter3(this.getActivity().getApplicationContext(), setListviewData3());
		list3.setAdapter(myAdapter3);
实例化listview和适配器,适配器传入参数setListData()方法,绑定适配器。

控件入门之Listview_第1张图片控件入门之Listview_第2张图片







你可能感兴趣的:(控件入门之Listview)