ListView的简单使用

                                       

        简单来说,ListView就是一个可以竖直滚动的列表,列表里边的内容是由一个条目一个条目组成,这些条目的都差不多相同,且内容都来自Adapter(适配器)。

   在布局里面使用ListView:

      

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/lv_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />

</RelativeLayout>
 

  在代码中通过findViewById()找到控件listview,开始设置数据适配器,而设置数据适配器有三种方式


 

   1.创建一个类实现ListAdapter接口,需要实现12个未实现的方法,太麻烦,所以我们一般继承ListAdapter的一个实现类BaseAdapter,只需要实现四个抽象方法即可。

   这四个方法种getCount()方法的作用是控制ListView显示的条目数,getView()方法是每一个条目里面展示的内容,getItem()方法是获取其中的某一个条目的数据集,getItemId()方法是指获取某一条目在整个条目中所在的位置,就是索引

   代码如下:

  

public class MainActivity extends Activity {

	private ListView lv_listview;
	private BaseAdapter adapter;
	/**
	 * 展示图片的数组
	 */
	private int[]  image={R.drawable.c,R.drawable.h,R.drawable.i,R.drawable.j};
	/**
	 * 描述的集合
	 */
	private List<String> details;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	    initData();
		initView();
	}

	/**
	 * 初始化数据
	 */
	private void initData() {
		details = new ArrayList<String>();
		for (int i = 1; i < image.length+1; i++) {
			details.add("这是第"+i+"张漂亮图片");
		}
	}

	/**
	 * 初始化view
	 */
	private void initView() {
		lv_listview = (ListView) findViewById(R.id.lv_listview);
		lv_listview.setAdapter(adapter=new BaseAdapter() {
			//利用viewholder优化listview
			ViewHolder viewholder=null;
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
			    //复用convertView历史对象
				if(convertView==null){
			    	  viewholder=new ViewHolder();
			     convertView= View.inflate(parent.getContext(), R.layout.layout_item, null);
			     convertView.setTag(viewholder);
			    }else{
			          viewholder = (ViewHolder) convertView.getTag();
			    }
				//寻找控件
			    viewholder.tv_detail= (TextView) convertView.findViewById(R.id.tv_detail);
			    viewholder.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon);
			    //设置view的数据
			    viewholder.iv_icon.setImageResource(image[position]);
			    viewholder.tv_detail.setText(details.get(position));  
			    //返回一个条目的对象
				return convertView;
			}
			
			@Override
			public long getItemId(int position) {
				return position;
			}
			
			@Override
			public Object getItem(int position) {
				return getItem(position);
			}
			
			@Override
			public int getCount() {
				//返回图片数组的长度,即显示的item的条数
				return image.length;
			}
		});
	}
	
	/**
	 * 静态内部类,只用加载一次
	 */
	static class ViewHolder{
		TextView  tv_detail;
		ImageView iv_icon;
	}
}
  效果展示:

  


  2.使用ArrayAdapter来适配数据,ArrayAdapter里面的四个参数分别代表的含义 

 参数一:上下文对象

  参数二:条目的布局资源

  参数三:布局里面的控件id

  参数四:存储数据的object类型的集合。

  其他的5个重构方法不再一一描述。

    代码如下:

   

public class MainActivity extends Activity {

	private ListView lv_listview;
	/**
	 * 描述的集合
	 */
	private List<String> details;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	    initData();
		initView();
	}

	/**
	 * 初始化数据
	 */
	private void initData() {
		details = new ArrayList<String>();
		for (int i = 1; i <10; i++) {
			details.add("这是第"+i+"个条目");
		}
	}

	/**
	 * 初始化view
	 */
	private void initView() {
		lv_listview = (ListView) findViewById(R.id.lv_listview);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.layout_item, R.id.tv_detail,details);
		lv_listview.setAdapter(adapter);
	}
}

   3.最后说说第三种,用simpleAdapter适配数据,不过这个用着比较麻烦一点

   

参数1:上下文

参数2:Map列表,列表要显示的数据,类型要与上面的一致,每个条目要与from中指定条目一致

参数3:就是每个条目展示数据的布局资源

参数 4: 就是map集合中的存储的key 

参数 5:是一个int数组,数组里面的id是布局中展示数据的控件的id,需要与第4个参数一一对应

    

public class MainActivity extends Activity {

	private ListView lv_listview;
	private List<Map<String, String>> data;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	        initData();
		initView();
	}

	/**
	 * 初始化数据
	 */
	private void initData() {
		data = new ArrayList<Map<String,String>>();
		Map<String, String> map1 = new HashMap<String, String>();
		map1.put("name","张飞");
		map1.put("phone", "119");
		Map<String, String> map2 = new HashMap<String, String>();
		map2.put("name","赵云");
		map2.put("phone", "120");
		Map<String, String> map3 = new HashMap<String, String>();
		map3.put("name","貂蝉");
		map3.put("phone", "114");
		data.add(map1);
		data.add(map2);
		data.add(map3);
	}

	/**
	 * 初始化view
	 */
	private void initView() {
		lv_listview = (ListView) findViewById(R.id.lv_listview);
		SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), data, R.layout.layout_item, new String[]{"name","phone"}, new int[]{R.id.tv_name,R.id.tv_detail});
		lv_listview.setAdapter(adapter);
	}
}







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值