ListView和Adapter

1、在android开发中ListView是比较常用的组件,它以列表的形式垂直展示具
    体内容,并且能够根据数据的长度自适应显示

2、ListView继承关系
    java.lang.Object
      --android.view.View
         --android.view.ViewGroup
           --android.widget.AdapterView<T extends android.widget.Adapter>
             --android.widget.AbsListView
           --android.widget.ListView

3、ListView基本结构
    header

    item

    footer


4、ListView的数据显示需要三个要素
    ListVeiw :用来展示列表的View
    适配器(Adapter) :用来把数据映射到ListView上
        ArrayAdapter(功能很简单只能显示文字)
        SimpleAdapter
        BaseAdapter
    数据 :具体的将被映射的字符串,图片,或者基本组件

5、ListView+Adapter使用步骤
    1)创建或获取ListView
    2)创建Adapter
        比如ArrayAdapter
        列表项(Item)布局可以使用Android平台内置的layout
            android.R.layout.simple_list_item_1
        也可以自定义一个layout
    3)调用setAdapter将ListView和Adapter关联
        android.widget.ListView.setAdapter(ListAdapter adapter)

6、案例-显示姓名信息

效果图


    activity_main.xml(Activity的主页面)
    <?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" >
    <ListView
        android:id="@+id/listView_info"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></ListView>

</LinearLayout>


列表中一个项目的布局文件call_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"
    android:paddingLeft="10dp"
    android:paddingTop="10dp"
     >
    
    <TextView
        android:id="@+id/call_item_tv_familyname"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@android:color/holo_blue_bright"
        android:gravity="center"
        android:text="周"
        />
    
    <LinearLayout
        android:id="@+id/call_item_ll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingLeft="5dp"
        android:layout_toRightOf="@id/call_item_tv_familyname"
        >
        <TextView
            android:id="@+id/call_item_tv_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="5dp"
            android:text="周游"
            />
        
        <TextView
            android:id="@+id/call_item_tv_phone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="5dp"
            android:text="1234567778"
            />
        
        
    </LinearLayout>

</RelativeLayout>


package com.hngde.listviewdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import com.domain.User2;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;


CallMainActivity.java(利用SimpleAdapter适配器实现)
public class CallMainActivity extends Activity {
    private ListView listView_info;
    private List<Map<String,String>> user2List;

    public CallMainActivity(){
        user2List = new ArrayList<Map<String,String>>();
        
        Map<String,String> map1 = new HashMap<String,String>();
        map1.put("familyName","周");
        map1.put("name", "周游");
        map1.put("phone","18273301805");
        
        Map<String,String> map2 = new HashMap<String,String>();
        map2.put("familyName","杨");
        map2.put("name", "杨明");
        map2.put("phone","18271601805");
        
        Map<String,String> map3 = new HashMap<String,String>();
        map3.put("familyName","应");
        map3.put("name", "应以正");
        map3.put("phone","16273301609");
        
        user2List.add(map1);
        user2List.add(map2);
        user2List.add(map3);
        
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listview_layout);
        
        listView_info = (ListView) this.findViewById(R.id.listView_info);
        
        //创建适配器
        SimpleAdapter sa = new SimpleAdapter(
                this,   //传入当前的Activity
                user2List,  //这是一个装入了map的集合,其中存储了我们要显示的数据
                R.layout.call_item, //这是ListView每个项目的布局文件
                new String[]{"familyName","name","phone"}, //这里是map中的键,是用来获取map中的值的
                new int[]{R.id.call_item_tv_familyname,  //这是map中的值将要放入的组件
                      R.id.call_item_tv_name,
                          R.id.call_item_tv_phone}
                );
        //设置页面标题
        this.getActionBar().setTitle("通讯记录");
        
        listView_info.setAdapter(sa);
        }
    
    
    

}


关于SimpleAdapter的说明



SimpleAdapter显示的信息多,但不够灵活,BaseAdapter可以解决所有问题
BaseAdapter抽象类,作为自定义Adapter的父类
开发中大部分情况下都得使用BaseAdapter类作为适配器

CallMainActivity.java(利用BaseAdapter适配器实现)
package com.hngde.listviewdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import com.domain.User2;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class CallMainActivity extends Activity {
    private ListView listView_info;
    private List<User2> user2List;

    //用来随机改变姓氏上面的颜色
    private int[] colorId = new int[]{
        Color.BLUE,
        Color.CYAN,
        Color.RED,
        Color.GREEN,
        Color.YELLOW
    };
    
    
    public CallMainActivity(){
        user2List = new ArrayList<User2>();
        User2 user1 = new User2("周","周游","18273301805");
        User2 user2 = new User2("周","周游","18273301805");
        User2 user3 = new User2("周","周游","18273301805");
        User2 user4 = new User2("周","周游","18273301805");
        User2 user5 = new User2("周","周游","18273301805");
        User2 user6 = new User2("周","周游","18273301805");
        user2List.add(user1);
        user2List.add(user2);
        user2List.add(user3);
        user2List.add(user4);
        user2List.add(user5);
        user2List.add(user6);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listview_layout);
        
        listView_info = (ListView) this.findViewById(R.id.listView_info);
        //添加适配器
        listView_info.setAdapter(new CallAdapter(this));
        
        this.getActionBar().setTitle("通讯记录");
        }
    
    //产生一个0-5之间的随机数
    public int getRandomNum(){
        Random random = new Random();
        int n = Math.abs(random.nextInt());
        return n%5;
        
    }
    
    class CallAdapter extends BaseAdapter{
        private Context context;
        public CallAdapter(Context context){
            this.context = context;
        }
        @Override
        public int getCount() {
            return user2List.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View arg1, ViewGroup arg2) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View v = layoutInflater.inflate(R.layout.call_item, null);
            TextView call_item_tv_familyname = (TextView) v.findViewById(R.id.call_item_tv_familyname);
            TextView call_item_tv_name = (TextView) v.findViewById(R.id.call_item_tv_name);
            TextView call_item_tv_phone = (TextView) v.findViewById(R.id.call_item_tv_phone);
            User2 user = user2List.get(position);
            call_item_tv_familyname.setText(user.getFamilyName());
            call_item_tv_name.setText(user.getName());
            call_item_tv_phone.setText(user.getPhone());
            call_item_tv_familyname.setBackgroundColor(colorId[getRandomNum()]);
            return v;
        }
        
    }
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值