最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

Android ListView adapter详细使用教程

Android 太平洋学习网 浏览 评论

android ListView组件使用实在是太频繁了,因此特意制作了Android ListView的详细使用教程,还有和listview配套使用的BaseAdapter以及ArrayAdapter都会在文章后面有讲到,非常的实用。

为了便于理解下面listview的使用方法,我想先让你看下本人的android项目的目录结构是很有必要的,如图。

Image 2.png

案例一:首先我们用ListView制作一个简单的联系人列表,没有头像,就只有一个名字,暂时只用了activity_main.xml这一个layout xml文件,请先不考虑其它几个文件。效果如图。

Image 1.png

1:首先我们在activity_main.xml这个文件里面定义一个listview标签,用于显示表格数据,代码如下。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.baidu.listviewdemo.MainActivity">
    <!--添加一个Listview标签-->
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/myListView">
    </ListView>

</RelativeLayout>

2:然后我们在对应的MainActivity.java文件里面写方法,给listview添加数据,代码如下,运行之后就是上面图片的效果。

package com.baidu.listviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
    private  ListView listView;
    String[] phones = new String[] { "Android", "iOS", "WindowsMobile", "Blackberry","YunOS"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView)findViewById(R.id.myListView);
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,phones);
        listView.setAdapter(adapter);
    }
}

提醒:simple_list_item_1这个是android系统提供的layout,它的相当于listview行对象,phones是一个存有数据的数组,ArrayAdapter会自动给每一行对象添加数据。

案例二:由于上面案例一的listview太过简单,有时候不符合我们的需求,因此我们需要自定义listview的row(行),效果如图。

Image 3.png

1:我们将activity_main.xml里面的Listview标签给去除掉,因为我们要自定义新建一个叫list_view.xml的layout文件,新建方法为:选择layout文件夹->右键new->xml->layout xml file,新建之后我们在list_view.xml文件中自定义一个Listview的标签,宽高设置为屏幕大小(match_parent),代码如下。

<?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">
    <!--自定义的listview-->
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/myListView">
    </ListView>
</LinearLayout>

2:我们再新建一个layout_item.xml的layout文件,里面自定义两个ImageView和TextView标签,用于在每一行显示头像和名字,代码如下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:paddingLeft="10dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!--显示头像-->
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:maxWidth="30dp"
        android:maxHeight="30dp"
        android:layout_gravity="center_vertical"
        android:id="@+id/logo_image"
        />
    <!--显示名称-->    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:height="44dp"
        android:textSize="16dp"
        android:gravity="center_vertical"
        android:id="@+id/my_text"/>
</LinearLayout>

3:自定义一个MyAdapter类,并继承ArrayAdapter类(BaseAdapter也是可以的),实现ArrayAdapter里面所有的方法,代码如下。

package com.baidu.listviewdemo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyAdapter extends ArrayAdapter {
    private Context context;
    private String[] phones;
    //Inflater意思为充气机,就是用于设置每行数据的对象
    private LayoutInflater flater;

    public MyAdapter(Context context, int resource,String[] phones) {
        super(context,resource,phones);
        this.context = context;
        this.phones = phones;
        flater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {
        return phones.length;
    }

    @Override
    public Object getItem(int position) {
        return phones[position];
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){
            //通过flater获取lis行对象
            convertView = flater.inflate(R.layout.layout_item,parent,false);
        }
        //设置头像数据
        ImageView imageView = (ImageView)convertView.findViewById(R.id.logo_image);
        imageView.setImageResource(R.drawable.ic_account_circle);
        //设置名称数据
        TextView textView = (TextView)convertView.findViewById(R.id.my_text);
        textView.setText(phones[position]);
        return convertView;
    }

}

4:在MainActivity.java中加载我们的listView,这样就会显示我们的联系人列表数据了,代码如下。

package com.baidu.listviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
    private  ListView listView;
    String[] phones = new String[] { "Android", "iOS", "WindowsMobile", "Blackberry","YunOS"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        //设置list_view.xml为程序主页面
        setContentView(R.layout.list_view);
        //获取listview对象
        listView = (ListView)findViewById(R.id.myListView);
        //自定义adapter
        MyAdapter adapter = new MyAdapter(this,R.layout.layout_item,phones);
        listView.setAdapter(adapter);
        //为每一行添加点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                System.out.println("你选择的手机是:"+phones[position]);
            }
        });
    }
}

提示:R.layout.layout_item也是行对象,里面包含了Imageview和TextView两个元素,所以需要作为参数传给ArrayAdapter对象。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/2017/0805/180.html

    与本文相关的文章

    发表我的评论
    取消评论

    表情

    您的回复是我们的动力!

    • 昵称 (必填)

    网友最新评论