Android-listview控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-listview控件相关的知识,希望对你有一定的参考价值。

1:首先先创建一个listview的视图文件。listview.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="match_parent"
    android:orientation="vertical" >
    
    <!--
    	在android开发中ListView是比较常用的组件,
    	它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。
      -->
    
    <ListView
           android:id="@+id/listView1"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_margin="5dp" 
           android:divider="#dddddd"
           android:dividerHeight="1dp">
    </ListView>

</LinearLayout>

  

2:定义一个显示界面的视图文件。item.xml

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

    <ImageView
        android:id="@+id/pic"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:src="@drawable/xms" 
        android:layout_marginBottom="5dp"/>

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/pic"
        
        android:textSize="16sp"
        android:textColor="#333"
        android:layout_marginTop="10dp"/>

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/text1"
        android:layout_below="@+id/text1"
         
        android:textColor="#666"
        android:textSize="14sp"/>

    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/text2"
        android:layout_alignParentRight="true"
         
        android:textColor="#666"
        android:textSize="12sp"
        android:layout_marginRight="5dp"/>

</RelativeLayout>

 

3:源文件中编写代码:第一种方式(SimpleAdapter适配器)

package com.huanglinbin.weixintext;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
	//私有化Listview的控件。
	private ListView listView;
	//私有化ListView的适配器。
	private SimpleAdapter simpleAdapter;
	//私有化list集合。
	private List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
	//私有化radiogub的控件。
	private RadioGroup radioGroup;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //先要找到那两个控件。
        listView = (ListView) findViewById(R.id.listView1);
        radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
        
        //把数据源赋值到集合里面。
        list = getDate();
        //定义一个适配器
        simpleAdapter = new SimpleAdapter(
	        		this,//上下问对象。
	        		list, //数据源(也就是从数据库里面取出来的数据存放到这来,之后就循环输出出来)
	        		R.layout.item,//页面输出的模板。
	        		new String[]{"pic","text1","text2","text3"}, //这个相当于实体类中的属性,把这些属性存放到数组里面。
	        		new int[]{R.id.pic,R.id.text1,R.id.text2,R.id.text3} //这个相对于句柄,通过句柄来找到模板中的数据源。
        		);
        //把这个适配器加入到listview的控件中去。
        listView.setAdapter(simpleAdapter);
       
    }

    
  //定义数据源。
    private List<Map<String,Object>> getDate(){
    	//定义一个循环,把数据循环输出出来。
    	for(int i=0;i<5;i++){
    		//定义一个map集合,把集合加入到map的集合里面。
    		Map<String,Object> map = new HashMap<String, Object>();
    		map.put("pic",R.drawable.xms);
    		map.put("text1", "小魔神");
    		map.put("text2", "Android一班老师");
    		map.put("text3", "昨天");
    		//把map集合加到list集合里面去。
    		list.add(map);
    	}
    	
    	return list;
    }
    
    
   
}

  

第二种方式:(BaseAdapter适配器)

//简单理解为VC绑在一起
        
        baseAdapter,店长推荐 5星级
        lv.setAdapter( new BaseAdapter(){

        	//返回多少条记录
			@Override
			public int getCount() {
				// TODO Auto-generated method stub
				return messageList.size();
			}
			//每一个item项,返回一次界面
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				View view = null;
				
				
				//布局不变,数据变
				
				//如果缓存为空,我们生成新的布局作为1个item
				if(convertView==null){
					Log.i("info:", "没有缓存,重新生成"+position);
					LayoutInflater inflater = MainActivity.this.getLayoutInflater();
					//因为getView()返回的对象,adapter会自动赋给ListView
					view = inflater.inflate(R.layout.listview_item_layout, null);
				}else{
					Log.i("info:", "有缓存,不需要重新生成"+position);
					view = convertView;
				}
				Message m = messageList.get(position);
				
				TextView tv_userName = (TextView)view.findViewById(R.id.tv_userName);
				tv_userName.setText(  m.getUserName()  );
				tv_userName.setTextSize(15);
				
				TextView tv_lastMessage = (TextView)view.findViewById(R.id.tv_lastMessage);
				tv_lastMessage.setText(  m.getLastMessage()  );
				tv_lastMessage.setTextSize(12);
				
				TextView tv_datetime = (TextView)view.findViewById(R.id.tv_datetime);
				tv_datetime.setText( m.getDatetime()  );
				tv_datetime.setTextSize(12);

				return view;
			}
			
			@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;
			}

			
        	
        } );

  

 

以上是关于Android-listview控件的主要内容,如果未能解决你的问题,请参考以下文章

Android - ListView 中的延迟点击

Android-ListView两种适配器以及事件监听

android-ListView空间的使用

android-ListView使用技巧以及优化

Android-Listview中Bitmap的缓存实现有哪些方式

Android 片段与复合控件