Android数据展示之ListView

Android应用程序中经常需要使用ListView展示数据,一个ListView通常将数据填充到布局文件中,在填充的过程中需要知道连接数据与ListView的适配器。适配器是一个连接数据和AdapterView(ListView是一个典型的AdapterView)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。常用的适配器有三种ArrayAdapter,SimpleAdapter和BaseAdapter。

ArrayAdapter实现ListView

用ArrayAdapter可以实现简单的ListView的数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。ArrayAdapter的使用非常简单。

在布局文件中新增一个ListView

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

 activity中代码的实现,获取ListView没什么好说的,主要是setAdapter方法,第二个参数就是Android系统中内置布局文件,如果是android.R.layout.simple_list_item_1,就直接是一行文字,我只列举了三个,其他的可以自行测试:

		String[] listArrStrings=new String[]{"星期一","星期二","星期三"};
		listView=(ListView) findViewById(R.id.list_Test);

		listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice, listArrStrings));
		listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				String nameString=(String) parent.getItemAtPosition(position);
				setTitle("今天是:"+nameString);

			}

 实现结果如下:

重新改变一下代码,改变一下填充的默认的系统的布局文件,可以设置单选还是多选:

	listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, listArrStrings));
		listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

		listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, listArrStrings));
		listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

 效果如下:

   

SimpleAdapter实现ListView

这次先来看下要实现的效果:

ListView中每个View布局都一样,这个时候需要首先新建一个布局文件simpleitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/itemImage"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="10dp">

        <TextView
            android:id="@+id/itemTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="标题"
            android:textSize="25sp" />

        <TextView
            android:id="@+id/itemText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="xxxxxxxxx" />
    </LinearLayout>

</LinearLayout>

  这个时候代码调用也很简单,跟ArrayAdapter类似,SimpleAdapter,最后两个参数,一个是map中的键,一个对应的simpleitem中的id:

	ListView listView=(ListView) findViewById(R.id.list_simple);
		ArrayList<HashMap<String, String>> arrayList=new ArrayList<HashMap<String,String>>();
		for (int i = 0; i <10; i++) {
			HashMap<String, String> map=new HashMap<String, String>();
			map.put("itemTitle", "标题"+i);
			map.put("itemText", "内容"+i);
			arrayList.add(map);
		}

		SimpleAdapter simpleAdapter=new SimpleAdapter(this, arrayList, R.layout.simpleitem, new String[]{"itemTitle","itemText"},new
				int[]{R.id.itemTitle,R.id.itemText});
		listView.setAdapter(simpleAdapter);

 BaseAdapter实现ListView

BaseAdapter可扩展性,可以再View中加入自己定义的一些操作事件,使用的时候需要实现BaseAdapter类,定义一个自己的类;

	class MyBaseAdapter extends BaseAdapter {

		// 定义List的长度
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 100;
		}

		@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 30;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			 TextView textView = new TextView(BaseActivity.this);
			 textView.setText("测试");
			 textView.setTextColor(Color.BLUE);
			 textView.setTextSize(20);
			 return textView;

		}
	}

  Activity中调用代码:

ListView listView = (ListView) findViewById(R.id.list_base);
		listView.setAdapter(new MyBaseAdapter());

  

上面其实用BaseAdapter实现了ArrayAdapter的功能,同样的可以使用BaseAdapter实现SimpleAdapter的功能:

还是同样的调用simplte这个布局,重写一下getView()方法:

	View view = null;
			if (convertView == null) {
				LayoutInflater inflater = BaseActivity.this.getLayoutInflater();
				view = inflater.inflate(R.layout.simpleitem, null);
			}else{
				view=convertView;
			}
			TextView tvTitleTextView=(TextView) view.findViewById(R.id.itemTitle);
			TextView tvTextView=(TextView) view.findViewById(R.id.itemText);
			tvTitleTextView.setTextSize(20);
			tvTitleTextView.setText("标题---"+position);
			tvTitleTextView.setTextColor(Color.RED);
			tvTextView.setTextSize(15);
			tvTextView.setText("内容----"+position);
			return view;

  效果如下:

十一点了,该睡觉了,程序员还是不要熬夜的比较好~

时间: 2024-10-11 05:34:42

Android数据展示之ListView的相关文章

给ListView列表添加数据展示动画

给ListView的数据展示  做点动画效果,数据较多时,手指往上拉动数据时,下面的数据感觉是往上推的,直接上关键代码: ---------------------动画文件res/anim:--------------------------------- up_from_bottom.xml: <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schema

Android 自定义Adapter 但listview 只显示第一条数据

楼主让这个问题郁闷了一晚上.....在logcat里明明显示adapter的getview方法里的list大于一条数据 ,但posotion却一直是0.....运行后也只显示list[0]里面的数据....最后的最后原来错误出在布局文件上 我以前的是这样的; <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- listv

Xamarin使用ListView开启分组视图Cell数据展示bug处理

问题描述 Xamarin使用IsGroupingEnabled="true"之后再Cell操作就会出现数据展示bug,数据不刷新的问题,如下图所示: 点击取消的是其他钢厂,但ViewCell展示的一直是“长峰”,这就分组试图一个比较常见的bug. 解决方案 在Tapped事件移除数据之前先把ListView的数据源设置为null,等操作完数据之后,在给ListView重新赋值上数据源,即可.核心代码如下:

[Aaronyang] 写给自己的WPF4.5 笔记9[复杂数据处理三步曲,数据展示ListView泪奔2/3]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 作者留言:        小小的推荐,作者的肯定,读者的支持.推不推荐不重要,重要的是希望大家能把WPF推广出去,别让这么好的技术消失了,求求了,让我们为WPF技术做一份贡献.其实写这篇文章时候已经哭了,最近几篇文章,在我个人看来都是wpf的宝藏文章.每天读者也就200-400多人,也说明了WPF的人越来也少了.但是我的Blend教程和WPF控件开发,3D W

Android开发之适配器-ListView适配器的重复数据

适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数据的情况,如何避免重复数据而且又能提高ListView大数据量时候的效率呢?,解决方案就是2点: 1. 在getView方法中 进行View的判断,即做convertView ==null 这样的判断,这样是为了提高数据量大的时候的效率. 2.设置数据用setTag()/getTag()方法来进行对

Android Demo之旅 ListView底部添加加载更多按钮实现数据分页

在我们的实际项目中,数据应该说是很多的,我们的ListView不可能一下子把数据全部加载进来,我们可以当滚动条滚动到ListView的底部的时候,给一个更多的提示,当我们点击它即加载下一页的数据,相当与我们的分页效果,参考网上的东西,写了一个小小的demo,并总结了一些知识点,功能图如下:    源代码下载地址:http://download.csdn.net/detail/harderxin/7762625 掌握知识点: 1)自定义Adapter,将数据和ListView绑定起来 2)理解La

Android中如何为ListView设置静态数据

有的时候我们需要为一个listview设置固定的数据,下边就是如何设置静态的数据 布局文件listview 的主页面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

json数据解析,并实现将网络json数据获取用listview显示

需要使用jar包 fastjson或gson这两个jar包. //Gson的使用方式 Gson gson=new Gson(); String str=ReadAssetsFile.readtext(this,"json_ss");//this当前类,"json_ss"需要解析的文件名 UserMessage userMessage=gson.fromJson(str,UserMessage.class);//需要解析的json文件最外层类名 //fastjson的

C#程序员学习Android开发系列之ListView

上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如何在ListView中按照我们想要的界面效果进行展示.限于篇幅这篇重点讲ListView,下篇博客重点阐述SQLite. ListView是一个常用的数据显示控件,假设我们要做一个简单的界面,如图所示. 这张图是我直接从Android平板电脑(Android 4.2.2)上面截图下来的,就是一个普通