一、简单的适配器填充方式。
在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的时候,要重载四个方法,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; } }
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()方法,绑定适配器。