• 【Android基础】listview控件的使用(4)-----自定义布局的listview的使用


    前面我介绍了listview控件的不同用法,但是这些用法在实际的开发项目中是不足以满足需求的,因为前面的几种用法只能简单的显示文本信息,而且布局都比较单一,很难做出复杂的结果,在实际的开发项目中,90%以上都是需要自己自定义listview的,这一篇,我们将介绍如何使用自定义布局的listview

    先看效果图



    好了,其实这种自定义布局的实现,是通过自定义adapter来实现的,首先我们简单介绍下adapter

    每个listview要想实现数据的显示,都必须绑定一个adapter,adapter主要实现将数据和listview中的每一个item进行绑定,这样就可以灵活的设计自己的布局了,我们看一下这次的项目目录




    现在开始看代码

    主界面的布局文件

    activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

    item_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="wrap_content"
        android:orientation="horizontal" >
    
        <ImageView
            android:id="@+id/img"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:padding="10dp"
            android:src="@drawable/ic_launcher" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/tv1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="3dp"
                android:layout_marginTop="3dp"
                android:gravity="center"
                android:text="标题"
                android:textSize="20sp" />
    
            <TextView
                android:id="@+id/tv2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="3dp"
                android:layout_marginTop="3dp"
                android:text="简介"
                android:textSize="16sp" />
        </LinearLayout>
    
    </LinearLayout>

    实体类thing.java

    package com.example.diylistview;
    
    public class Thing {
    
    	private String title;
    	private String Introduce;
    	private int picture;
    
    	public String getTitle() {
    		return title;
    	}
    
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    	public String getIntroduce() {
    		return Introduce;
    	}
    
    	public void setIntroduce(String introduce) {
    		Introduce = introduce;
    	}
    
    	public int getPicture() {
    		return picture;
    	}
    
    	public void setPicture(int picture) {
    		this.picture = picture;
    	}
    
    	/**
    	 * 
    	 */
    	public Thing() {
    		super();
    	}
    
    	/**
    	 * @param title
    	 * @param introduce
    	 * @param picture
    	 */
    	public Thing(String title, String introduce, int picture) {
    		super();
    		this.title = title;
    		Introduce = introduce;
    		this.picture = picture;
    	}
    
    }
    

    MyAdapter.java

    package com.example.diylistview;
    
    import java.util.List;
    
    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;
    
    public class MyAdapter extends BaseAdapter {
    
    	private Context context;
    	private List<Thing> lists;
    	private LayoutInflater layoutInflater;
    	ImageView img;
    	TextView tv1;
    	TextView tv2;
    
    	/**
    	 * 构造函数,进行初始化
    	 * 
    	 * @param context
    	 * @param lists
    	 */
    	MyAdapter(Context context, List<Thing> lists) {
    		this.context = context;
    		this.lists = lists;
    		layoutInflater = LayoutInflater.from(this.context);
    	}
    
    	// 获得长度,一般返回数据的长度即可
    	@Override
    	public int getCount() {
    		return lists.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    		return lists.get(position);
    	}
    
    	@Override
    	public long getItemId(int position) {
    		return position;
    	}
    
    	/**
    	 * 最重要的方法,每一个item生成的时候,都会执行这个方法,在这个方法中实现数据与item中每个控件的绑定
    	 */
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    		// convertView对象就是item的界面对象,只有为空的时候我们才需要重新赋值一次,这样可以提高效率,如果有这个对象的话,系统会自动复用
    		//item_listview就是自定义的item的布局文件
    		if (convertView == null) {
    			convertView = layoutInflater.inflate(R.layout.item_listview, null);
    		}
    		//注意findViewById的时候,要使用convertView的这个方法,因为是在它里面进行控件的寻找
    		img = (ImageView) convertView.findViewById(R.id.img);
    		tv1 = (TextView) convertView.findViewById(R.id.tv1);
    		tv2 = (TextView) convertView.findViewById(R.id.tv2);
    		//将数据与控件进行绑定
    		img.setBackgroundResource(lists.get(position).getPicture());
    		tv1.setText(lists.get(position).getTitle());
    		tv2.setText(lists.get(position).getIntroduce());
    		return convertView;
    	}
    
    }
    

    MainActivity.java

    package com.example.diylistview;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnItemClickListener {
    
    	private ListView listview;
    	private List<Thing> lists;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		listview = (ListView) findViewById(R.id.listview);
    		//初始化数据
    		lists = getLists();
    		//设置适配器
    		listview.setAdapter(new MyAdapter(this, lists));
    		//设置监听
    		listview.setOnItemClickListener(this);
    	}
    	//返回数据
    	private List<Thing> getLists() {
    		List<Thing> lists = new ArrayList<Thing>();
    		for (int i = 0; i < 20; i++) {
    			Thing thing = new Thing();
    			thing.setPicture(R.drawable.ic_launcher);
    			thing.setTitle("我是标题" + i);
    			thing.setIntroduce("我是简介" + i);
    			lists.add(thing);
    		}
    		return lists;
    	}
    	//item的点击监听时间
    	@Override
    	public void onItemClick(AdapterView<?> view, View arg1, int position,
    			long arg3) {
    		Toast.makeText(this, ((Thing)view.getItemAtPosition(position)).getTitle(), 0).show();
    
    	}
    
    }
    

    好了,自定义的listview的使用就到这里了,如果有疑问,请留言



  • 相关阅读:
    leetcode每日一题(2020-07-04):32. 最长有效括号
    【Python基础知识】(七)函数和模块
    【Python基础知识】(六)用户输入与while循环
    【Python基础知识】(五)字典及相关操作
    【Python基础知识】(四)比较运算符、逻辑运算符和if语句
    【Python基础知识】(三)遍历列表、切片和元组
    【Python基础知识】(二)列表简介、操作列表元素
    【Python基础知识】(一)搭建编程环境、变量和简单的数据类型
    Ant Design Vue 中table表格解析 HTML
    Ant Design Vue 中重写form表单样式
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3749557.html
Copyright © 2020-2023  润新知