ListView和Adapter使用详解

ListView其实就是一个用列表形式来展示数据的View


根据适配器adapter的不同可以实现不同的效果:


比如 丑得要命的:


这里写图片描述这里写图片描述


聊天撩妹的:


这里写图片描述这里写图片描述


还有这种


这里写图片描述


嘻嘻

让我们来看一下最简单的Listview+Arrayadapter

布局:

<?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"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:divider="#d8d8d8"
            android:dividerHeight="1dp">
        </ListView>
 </LinearLayout>

ListView.class:

public class ListView extends Activity{
     private ListView listView;
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);

        listView= (ListView)findViewById(R.id.listview);
        listView.setAdapter(new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1,getData()));
        setContentView(listView);

     }
      private List<String> getData(){
        List<String> data=new ArrayList<String>();
        data.add("我是爷爷");
        data.add("我是爸爸");
        data.add("我是哥哥");
        data.add("那我是谁");
        return data;
    }
}

效果:

这里写图片描述


ListView+BaseAdapter

这个稍微复杂一点,需要自定义布局文件


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:layout_margin="8dp"
        android:id="@+id/user_face"
        android:layout_width="46dp"
        android:layout_height="46dp" />
    <TextView
        android:text="234555566"
        android:textColor="#111111"
        android:textSize="18dp"
        android:id="@+id/user_text"
        android:layout_marginTop="12dp"
        android:layout_marginLeft="2dp"
        android:layout_toRightOf="@id/user_face"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="123456"
        android:textColor="#a1a1a1"
        android:id="@+id/user_message"
        android:layout_marginLeft="2dp"
        android:layout_below="@id/user_text"
        android:layout_toRightOf="@id/user_face"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="11:30"
        android:textColor="#a1a1a1"
        android:padding="12dp"
        android:id="@+id/user_time"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>


activity_main.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"
    >
<ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:divider="#d8d8d8"
            android:dividerHeight="1dp">
        </ListView>
 </LinearLayout>

MyAdapter.class:

package com.example.sm1n9.smingshop.Adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.sm1n9.smingshop.R;

import java.util.HashMap;
import java.util.List;

/**
 * Created by user on 2016/6/23.
 */
public class MyAdpterTest extends BaseAdapter {
    private Context context;//上下文对象
    private List<HashMap<String,Object>> list;//集合类 存放数据
    private LayoutInflater inflater;//布局容器

    public MyAdpterTest(Context context, List<HashMap<String, Object>> list) {//构造方法
        this.context = context;
        this.list = list;
        inflater=LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    //ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能    
        ViewHolder holder=null;
        if (convertView == null) {
                    holder=new ViewHolder();
                    convertView=inflater.inflate(R.layout.item,null);
                    holder.img= (ImageView) convertView.findViewById(R.id.user_face);
                    holder.title= (TextView) convertView.findViewById(R.id.user_text);
                    holder.info= (TextView) convertView.findViewById(R.id.user_message);
                    holder.time= (TextView) convertView.findViewById(R.id.user_time);
                    convertView.setTag(holder);
        }
        else{
                   holder= (ViewHolder) convertView.getTag();

        }

                holder.img.setBackgroundResource((Integer) list.get(position).get("image"));
                holder.title.setText((CharSequence) list.get(position).get("title"));
                holder.info.setText((CharSequence) list.get(position).get("info"));
                holder.time.setText((CharSequence) list.get(position).get("time"));


        return convertView;
    }
    class  ViewHolder{
        ImageView img;
        TextView title;
        TextView info;
        TextView time;

    }

}

ListView.class:

public class ListView extends Activity{
     private ListView listView;
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);

        listView= (ListView)findViewById(R.id.listview);
        List<HashMap<String,Object>> maps=new ArrayList<HashMap<String, Object>>();
            HashMap<String,Object> map= new HashMap<String,Object>();
            map.put("image", R.mipmap.h1);
            map.put("title", "系统消息");
            map.put("info", "OA办公体验站全新上线 哪里不会点哪里");
            map.put("time", "刚刚");
            maps.add(map);

            map=new HashMap<String,Object>();
            map.put("image", R.mipmap.h5);
            map.put("title","abe");
            map.put("info", "在干嘛?");
            map.put("time","15:30");
            map.put("ban",R.mipmap.icon_banned);
            maps.add(map);

            map=new HashMap<String,Object>();
            map.put("image", R.mipmap.h2);
            map.put("title", "Jack");
            map.put("info", "o(^▽^)o");
            map.put("time","12:30");
            map.put("ban",R.mipmap.icon_banned);
            maps.add(map);

            map=new HashMap<String,Object>();
            map.put("image", R.mipmap.h4);
            map.put("title", "比卡丘");
            map.put("info", "嗨");
            map.put("time","昨天");
            map.put("ban",R.mipmap.icon_banned);
            maps.add(map);


            listView.setAdapter(new MyAdpter(getActivity(), maps));
    }
}

效果:
这里写图片描述

补充说明:

listView在开始绘制的时,系统首先调用getCount()函数,根据他的返回值得到listView的长度,然后根据这个长度,调用getView()逐一绘制每一行。如果你的getCount()返回值是0的话,列表将不显示,## 标题 ##同样return 1,就只显示一行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值