andorid studio 之初识ListView

  这个是我自学ListVew,在看视频过程中做的小案例

一:理解ListView

ListView是一种用来显示多个可滑动顼列表(item)的viewGruop.

需要使用Adapter将集合数据 和每一个Item所对应的布局动态适配到ListView中显示。

显示列表:ListView.setAdapter(adapter);

 

二.Adapter层次图

现在我们从最简单的的列表开始讲解:

1、ArrayAdapter

       1.1-效果图

       

      1.2、涉及到的知识点

            setAdapter 显示列表

      1.3、创建一个项目ListViewDemo01

    

1.4、布局文件activity_main.xml中的代码
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv_main"
    tools:context=".MainActivity">
</ListView>

 1.5 创建一个Item.xml文件

       

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:textSize="20dp"
    android:gravity="center_vertical"
    android:layout_height="50dp">
</TextView>

 

  1.6、 设置MainActivity.xml中的代码

    

package com.example.a20473.listviewdemo01;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private ListView lv_main;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        lv_main = findViewById(R.id.lv_main);

        //准备集合数据
        String [] data = {"A","B","C","D","E","F","H","I","J","K","L","M","N"};
        //准备ArrayAdapter对象
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.item,data);
        //设置显示Adapter列表
        lv_main.setAdapter(adapter);


    }
}

   简单的ArrayAdapter列表就制作完成了

2、SimpleAdapter

       2.1  SimpleAdater参数的理解

  

      第一个参数 context:上下文对象。

      第二个参数 data:需要显示的数据集合。

      第三个参数 resource:Item布局标识。

      第四个参数 from:map对象中的key数组,用于得到相应的value。

      第五个参数 to:item布局文件中的子view的id的数组。

      效果图:

        

 

      2.2 创建项目SimpleAdapter  ,并准备好图片素材

 

      2.3  设置主布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv_main"
    tools:context=".MainActivity">



</ListView>

   2.4  新建布局文件item.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/iv_item_icon"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@mipmap/f1"/>
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:gravity="center_vertical"
         android:orientation="vertical"
         android:layout_marginLeft="10dp"
         >
         <TextView
             android:id="@+id/tv_item_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="name"/>

         <TextView
             android:id="@+id/tv_item_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="content"/>

     </LinearLayout>



</LinearLayout>

   2.4 设置主窗口的MainActivity.java

package com.example.a20473.simpleadapter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

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

public class MainActivity extends AppCompatActivity {
    private ListView lv_main;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv_main = findViewById(R.id.lv_main);

        //准备好集合数据
        List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
        Map<String ,Object> map = new HashMap<String ,Object>();

        map.put("icom",R.mipmap.f1);
        map.put("name","name--1");
        map.put("content","content--1");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f2);
        map.put("name","name--2");
        map.put("content","content--2");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f3);
        map.put("name","name--3");
        map.put("content","content--3");

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f4);
        map.put("name","name--4");
        map.put("content","content--4");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f5);
        map.put("name","name--5");
        map.put("content","content--5");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f6);
        map.put("name","name--6");
        map.put("content","content--6");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f7);
        map.put("name","name--7");
        map.put("content","content--7");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f8);
        map.put("name","name--8");
        map.put("content","content--8");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f9);
        map.put("name","name--9");
        map.put("content","content--9");
        data.add(map);

        map = new HashMap<String ,Object>();
        map.put("icom",R.mipmap.f10);
        map.put("name","name--10");
        map.put("content","content--10");

        data.add(map);

        //MAP对象中的KEY数组,用于得到value
        String[] from = {"icom","name","content"};
        //item布局文件的子view的id数组
        int[] to={R.id.iv_item_icon,R.id.tv_item_name,R.id.tv_item_content};


        //准备SimpleAdapter
        SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.item,from,to);

        //显示列表
        lv_main.setAdapter(adapter);
    }
}

3.BaseAdapter

      3.1BaseAdapter

       字面意思就是 最基础的Adapter,也就是说,它可以做所有的事情。所以为什么说最实用最常用,原因就在于它的全能性,不 会像 ArrayAdapter等的封装好的类有那么多局限性,但是这样的话,使用起来自然会更加麻烦一点。他是一个抽象类,需要创 建一个类来实现他,

         我们知道继承BaseAdapter需要重新四个方法:getCount、getItem、getItemId、getView。其中前三个都比较简单,而               getView稍微比较复杂。

3.2效果图(其实和上面的SimpleAdapter一样,只是用的方法不一样)

3.3创建一个项目BaseAdapter  并将准备好的素材放复制进去

3.4 先设置主布局文件的activity.xml中的文件

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv_main"
    tools:context=".MainActivity">



</ListView>

3.5 创建一个布局文件item.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/iv_item_icon"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@mipmap/f1"/>
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:gravity="center_vertical"
         android:orientation="vertical"
         android:layout_marginLeft="10dp"
         >
         <TextView
             android:id="@+id/tv_item_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="name"/>

         <TextView
             android:id="@+id/tv_item_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="content"/>

     </LinearLayout>



</LinearLayout>

3.6 创建一个类ShopInfo  (在下面的 我们自定义List集合中要用)

package com.example.a20473.baseadapter;


//这个是每一行Item的数据信息封装类
public class ShopInfo {
    private int icon;
    private String name;
    private String content;

    public ShopInfo() {
        super();
    }
    public ShopInfo(int icon, String name, String content) {
        super();
        this.icon = icon;
        this.name = name;
        this.content = content;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "ShopInfo{" +
                "icon=" + icon +
                ", name='" + name + '\'' +
                ", content='" + content + '\'' +
                '}';
    }
}

3.7 设置MainAcitity.java文件

  

package com.example.a20473.baseadapter;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

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

public class MainActivity extends AppCompatActivity {
    private ListView lv_main;
    List<ShopInfo> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv_main = findViewById(R.id.lv_main);
        //准备好集合数据  自定义集合
        data = new ArrayList<ShopInfo>();
        data.add(new ShopInfo(R.mipmap.f1,"name----1","cotent----1"));
        data.add(new ShopInfo(R.mipmap.f2,"name----2","cotent----2"));
        data.add(new ShopInfo(R.mipmap.f3,"name----3","cotent----3"));
        data.add(new ShopInfo(R.mipmap.f4,"name----4","cotent----4"));
        data.add(new ShopInfo(R.mipmap.f5,"name----5","cotent----5"));
        data.add(new ShopInfo(R.mipmap.f6,"name----6","cotent----6"));
        data.add(new ShopInfo(R.mipmap.f7,"name----7","cotent----7"));
        data.add(new ShopInfo(R.mipmap.f8,"name----8","cotent----8"));
        data.add(new ShopInfo(R.mipmap.f9,"name----9","cotent----9"));
        data.add(new ShopInfo(R.mipmap.f10,"name----10","cotent----10"));
        //准备BaseAdapter对象   它是抽象的 所以我们 要实例化继承它的类
        MyAdapter adapter = new MyAdapter();
        //显示列表
        lv_main.setAdapter(adapter);
    }
        class  MyAdapter extends  BaseAdapter{
            //返回集合数据中的数量
            @Override
            public int getCount() {
                return  data.size();
            }
            //返回指定下标对应的数据对象
            @Override
            public Object getItem(int position) {
                return data.get(position);
            }

            @Override
            public long getItemId(int position) {
                return 0;
            }
            //返回指定下标所对应的item的View 对象
            //position:下标
            //convertView:  可复用的Item缓存对象   前n+1个为null
            // parent  : ListView对象
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                if(convertView == null){
                    // 加载Item视图对象  得到View对象
                    convertView= View.inflate(MainActivity.this,R.layout.item,null);
                }
               //根据Position设置对应的数据
                    //得到当前行的数据对象
                ShopInfo shopInfo = data.get(position);
                     //得到子View对象
                ImageView imageView = convertView.findViewById(R.id.iv_item_icon);
                TextView NameTV   =convertView.findViewById(R.id.tv_item_name);
                TextView  ContentTv = convertView.findViewById(R.id.tv_item_content);
                      //设置数据
                imageView.setImageResource(shopInfo.getIcon());
                NameTV.setText(shopInfo.getName());
                ContentTv.setText(shopInfo.getContent());

                return convertView;

            }
        }

}

   

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值