控件入门之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的时候,要重载四个方法,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
- 控件入门之Listview
- ListView控件入门
- C#控件--ListView入门应用
- Android 控件之ListView
- Android控件之ListView
- Android控件之ListView
- android控件之ListView
- Android控件之ListView
- 常用控件之listview
- Android控件之ListView
- Android控件之ListView
- Android控件之ListView
- Android之ListView控件
- jQueryMobile控件之ListView
- Android控件之ListView
- Android控件之ListView
- 常用控件之listview
- Android控件之ListView
- mac shell 初学 变量输入输出
- 实习之多线程
- RSA
- C++ string类中的字符串处理函数
- 一致性Hash算法背景
- 控件入门之Listview
- 2015-12-29 FFC
- 当前界面隐藏navigationbar后动画出现白条
- mysql数据库设计学习---数据库设计规范化的五个要求
- iOS系统定位权限弹出框和跳转系统设置
- 你给我解析清楚,都有了CALayer了,为什么还要UIView
- 搭建Git服务器
- Spark:用Scala和Java实现WordCount
- codeforces 304D. Rectangle Puzzle II(设计矩形)