Android进阶之路 - ListView的使用详解

始于2017,修于2019 ~

2017的起篇

ListView的使用太多了,没有一个App不使用,虽然有点老了,但是我觉得还是可以为大家讲解一下,当然之后也会给大家带来RecyclerView的详细使用,不过我认为当你熟悉ListView之后会更快的掌握RecyclerView的使用,因为其原理相通,RecyclerView大家可以后续小小关注一下,下面为大家带来本篇详解

2019的起篇

在2017年的时候,当时Android市场上大部分的App依旧在使用ListView控件,当然在这个阶段中RecyclerView已经开始逐步崭露头角 ~

本着了解历史进化的原则,所以本篇记录了较早时期ListView使用方式,在此基础上加以学习方便更快的掌握RecyclerView的使用方式,因为其原理相通毕竟相通,只不过RecyclerView封装的更好,方便大家使用罢了 ~

效果图

Android进阶之路 - ListView的使用详解_第1张图片

使用步骤

1.添加ListView控件在需要使用的地方
2.创建Item样式,同时创建Bean类
3.创建Adapter继承BaseAdapter重写方法
4.如果想优化的话,可以使用ViewHolder
5.如果写死数据自己填充,如果接收后台数据我们需要根据参数写对应的Xml与Bean

MainActivity
package com.example.costomlistview;

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

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity<V> extends Activity {

	private List mainList = new ArrayList<Person>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//查找我们的ListView
		ListView mList = (ListView) findViewById(R.id.main_list);
		//设置假数据
		for (int i = 0; i < 3; i++) {
			Person person = new Person();
			person.setName("回顾老知识");
			person.setAge(i);
			person.setImage(R.drawable.ic_launcher);
			mainList.add(person);
		}
		//设置我们的Adapter进行数据填充
		ListAdapter adapter = new CostomAdapter(mainList);
		mList.setAdapter(adapter);
	}

	//创建我们自己的Adapter 集成BaseAdapter 增加扩展性
	public class CostomAdapter extends BaseAdapter {
		public CostomAdapter(List<Person> lists) {
			super();
			this.lists = lists;
		}

		private List<Person> lists;
		private View view;
		private TextView item_name;
		private TextView item_age;
		private ImageView item_icon;
		
		@Override
		public int getCount() {
			return lists.size();
		}

		@Override
		public Object getItem(int arg0) {
			return lists.get(arg0);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}
		//主要在这里要注意
		//1.创建我们要用到的item样式
		//2.创建ViewHodler进行缓存
		//3.设置tag,抽取tag
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			//先设置ViewHolder(缓存视图)为null
			 Viewholder viewholder=null;
			if (convertView == null) {
				viewholder = new Viewholder();
				view = LinearLayout.inflate(getApplicationContext(),
						R.layout.item_demo, null);
				viewholder.name = (TextView) view.findViewById(R.id.item_name);
				viewholder.age = (TextView) view.findViewById(R.id.item_age);
				viewholder.icon = (ImageView) view.findViewById(R.id.item_image);
				view.setTag(viewholder);
			} else {
				viewholder = (Viewholder) view.getTag();
			}
		//大家可以使用这种方式,但是既然是针对初学者,我认为最原始的最好
		//Person person = lists.get(position);
		//viewholder.name.setText("姓名:" + person.getName().toString()
		//+ "---");
			
			viewholder.name.setText("姓名:" + lists.get(position).getName().toString()
					+ "---");
			viewholder.age.setText("年龄:" + lists.get(position).getAge() + "---"
					+ "头像:");
			viewholder.icon.setImageResource(+lists.get(position).getImage());
			return view;
		}
	}
	//我们的缓存视图的类
	class Viewholder {
		private TextView name;
		private TextView age;
		private ImageView icon;
	}
}
activity_main
<RelativeLayout 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"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/main_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
RelativeLayout>
Person
package com.example.costomlistview;

public class Person {
    private String name;
    private int age;
    private int image;

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", image=" + image
                + "]";
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
        super();
    }
}
item_demo - 子条目layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名:" />

    <TextView
        android:id="@+id/item_age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="年齡:" />

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:text="图片:" />
LinearLayout>

你可能感兴趣的:(Android进阶之路)