控件入门之Listview

来源:互联网 发布:dota2数据分析 编辑:程序博客网 时间:2024/05/16 14:51

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

在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;    }@Overridepublic int getCount() {// TODO Auto-generated method stub                  //得到适配器的个数return list.size(); }@Overridepublic Object getItem(int position) {                   //获取数据的位置上的数据// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic 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);  //绑定布局的方法设置ViewTextView 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;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn ls.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@SuppressLint("InflateParams")@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubItemHodlerWithTextTextImageClass 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()方法,绑定适配器。









0 0
原创粉丝点击