Android列表开发继承BaseAdapter实列教程

前言:时隔3个半月,我又回来了,以后文章会继续跟着走,本来这篇文章是想周六周天更的,但是时间不等人,后面还有其它事忙,因为3.4个月没写文章了可能有点生疏,将就看看~~
今天主要的教程是针对于Android列表<ListView>的一个开发教程,效果如图:

这期教程说难也不难说简单也不简单,其实现在大多流行的也都是嵌套的线性布局列表,如下:

那么下面开始教程:
先放ListView的xml代码和线性布局的代码
ListView部分:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" tools:context=".list" android:orientation="vertical" > <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="55dp" android:dividerHeight="1dp" android:divider="#E4E4E4" ></ListView> </LinearLayout>
线性部分(下面这段看看就行,因为很简单):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="100dp"
tools:context=".list_item"
android:orientation="horizontal"
android:padding="10dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="3"
android:gravity="center"
>
<TextView
android:id="@+id/listid"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="#f00"
android:gravity="center"
android:text="1"
android:textColor="#fff"
android:textSize="25sp"
></TextView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/listtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一章 Android基础入门"
android:textStyle="bold"
android:textColor="@color/black"
android:textSize="18sp"
></TextView>
<TextView
android:id="@+id/listjieshao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="共计5题"
></TextView>
</LinearLayout>
</LinearLayout>
这段线性布局的xml代码看看就行,不是本章重点,本章重点是BaseAdaper的用法,下面进行java代码编译
下面继续:
Arraylist部分
在列表开发里面有个对象操作,这里的对象用于存放数据,java的“对象”跟js的“对象”不一样,js的对象可以直接在数组里面编译,但是java不行,java得先new,再进行对象操作。
这里我创建了一个Arraylist.java,里面用来存放4个变量
package com.android.xuexi2; class Arraylist { public String id; public String title; public String jieshao; public int color; }
然后在另一个文件list.java中写入方法initDate(){}
List<Arraylist> alist;//全局变量 Arraylist arraylist;//全局变量 public void initDate(){ alist=new ArrayList<Arraylist>(); for(int i=0;i<10;i++){ arraylist=new Arraylist(); arraylist.id=i+1+""; switch (i){ case 0: arraylist.title="第一章"; arraylist.jieshao="第一章介绍"; arraylist.color=(R.drawable.exercises_bg_1); break; case 1: arraylist.title="第二章"; arraylist.jieshao="第二章介绍"; arraylist.color=(R.drawable.exercises_bg_2); break; case 2: arraylist.title="第三章"; arraylist.jieshao="第三章介绍"; arraylist.color=(R.drawable.exercises_bg_3); break; } alist.add(arraylist); } }
在这个里面我们需要用到方法List<Arraylist>,但是这里我们new的是ArrayList<Arraylist>(<Arraylist>的意思是对接的Arraylist.java中的变量),我们new的ArrayList<>是一个类,如果要使用里面的方法我们就需要里面的一个实列List<>,所以List<ArrayList> alist=new ArrayList<ArrayList>
我们ArrayList的用法就是将变量字符串全写进去,然后需要使用的时候全部调出来,如图:

所以,这里使用for循环与switch就是为了创造多个对象,并且将创建的对象写入List<Arraylist>,这里画个图看的懂些:

这里需要读取某个对象的值时就用 System.out.println(alist.get(0).id); System.out.println(alist.get(0).title); 第1个对象就get(0); 第2个对象就get(1); 依次类推
这些数据进入对象后在后面就可以直接导入列表,如果需要变换刷新列表就行了。
BaseAdaper
下面就来到继承BaseAdaper后的使用教程,先释放源代码:
package com.android.xuexi2; import android.content.Context; import android.view.View; import android.view.ViewGroup; class BaseAdapter extends android.widget.BaseAdapter { @Override public Object getItem(int position) { return null; } @Override public int getCount() { return 0; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { return null; } }
这里是源代码,下面实列代码,带有注释分析
package com.android.xuexi2; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class list_item extends BaseAdapter { Context context;//上下文 List<Arraylist> alist;//List对象变量 public list_item(Context context) { this.context = context;//用于对接list.java与list_item的上下文 } public void setData(List<Arraylist> alist) { this.alist = alist;//从list.java导入List<Arraylist> alist变量 notifyDataSetChanged();//刷新列表 } //获取Item总数 @Override public int getCount() { return alist == null ? 0 : alist.size(); } //根据position得到对应Item的对象 @Override public Arraylist getItem(int position) { return alist == null ? null : alist.get(position); } //根据position获取对应Item的id,一般用于获取Item为第一个 @Override public long getItemId(int position) { return position; } //得到position对应的Item视图,position是当前Item的位置,convertView参数是划出屏幕的Item的View @Override public View getView(int position, View convertView, ViewGroup parent) { viewhor vb;//内部类viwehor的变量 if (convertView == null) { vb = new viewhor();//new一次viewhor对象 convertView = LayoutInflater.from(context).inflate(R.layout.activity_list_item, null); //获取线性布局实列,并将线性布局赋给convertView,这里的context是呼应上下文的意思,也就是Context context vb.listid = convertView.findViewById(R.id.listid);//通过convertView获取控件id vb.listtitle = convertView.findViewById(R.id.listtitle);//通过convertView获取标题 vb.listjieshao = convertView.findViewById(R.id.listjieshao);//通过convertView获取介绍 convertView.setTag(vb);//写入对象内部类viewhor中的3个TextView变量 } else { vb = (viewhor) convertView.getTag();//获取变量对象 } Arraylist arraylist1 = getItem(position);//使用getItem方法获取Item是第几个 //convertView的点击事件 convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (arraylist1 == null) {//使用getItem方法获取的Item为空时返回空 return; } System.out.println(getItem(position).title);//输出点击的是第几个的标题 } }); final Arraylist arraylist = getItem(position);//使用getItem方法获取Item是第几个 if (arraylist != null) {//当对象变量不为空时执行 vb.listid.setText(arraylist.id);//更新id值 vb.listid.setBackgroundResource(arraylist.color);//更新颜色 vb.listtitle.setText(arraylist.title);//更新标题 vb.listjieshao.setText(arraylist.jieshao);//更新介绍 } return convertView;//返回convertView } //内部类viewhor class viewhor { //TextView变量 TextView listid; TextView listtitle; TextView listjieshao; } }
以上就是列表要导入的线性布局操作,下面是执行代码:
我们在Arraylist部分讲解了对象变量的保存方式,那么我们需要做的就是先将变量存储 list.java执行: list_item list_item=new list_item(activity);//new list_item.java文件传入Activoty activity进list_item中的无参list_item ListView listView.setAdapter(list_item);//将线性布局写入适配器 list_item.setData(alist);//将List<Arraylist> alist写入list_item的List<Arraylist> alist; 对应的list_item.java执行代码: Context context;//上下文 public list_item(Context context) { this.context = context;//用于对接list.java与list_item的上下文 } public void setData(List<Arraylist> alist) { this.alist = alist;//从list.java导入List<Arraylist> alist变量 }
到这里就接入成功了,然后运行程序就可以让线性布局导入列表ListView了
教程结束!