第66篇 Android Studio一篇文章简单理解ListView和适配器

1.思维导图

我看我写的文章,阅读量最高的是适配器和ListView的运用,因为这也是开发app的重要所在,所以就再写这一篇文章,也希望能加深自己的理解。
适配器
从这张图中得到的信息是,我们除了在主界面布局中添加ListView外,还要添加ListView这个列表要显示内容的布局,比如我们显示的是一张图片和一行文字,就在布局中添加一个ImageView和TextView,反正就是添加相应的控件。
第二就是重写一个类MyAdapter,继承自BaseAdapter类,这个是来进行适配的。
数据类的话如果想要显示的信息很多(三个以上吧),建议写一个,不然你的适配器里变量肯定要多了。
好了,下面逐步讲解。

2.主界面布局

新建项目打开之后,把原有的布局改成线性布局,其他的都不需要该,然后添加ListView,注意为ListView添加id。
在这里插入图片描述

3.添加适配界面布局

找到res下的layout
在这里插入图片描述
右键点击,选择New,点击Layout Resource File
在这里插入图片描述
点击之后填写文件名称,点击ok
在这里插入图片描述
打开之后就布局,这样就可以用了。
在这里插入图片描述
但是布完局什么都没有,感觉很不爽,所以我们添加一些信息。

添加图片
从电脑里复制一张图片,右键drawable,点击Paste
在这里插入图片描述
有时候它会出现一个改名字的界面,但有时候没有,只要你的图像名称规范就行
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
不过可以添加进去,再改名,右键图片,
在这里插入图片描述
点击Rename
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以了。

添加文本数据
在这里插入图片描述
在strings.xml文件添加就好,然后在list_layout文件添加显示。
在这里插入图片描述
有信息了,但是不是我们想要的,所以我们要调整比例。
在这里插入图片描述
好了,这个界面好了。然后添加数据类
在这里插入图片描述

然后添加适配器类,首先是变量,和构造函数
在这里插入图片描述
然后是三个重写的函数
在这里插入图片描述
最后是最主要的函数
在这里插入图片描述
ok,适配器完了,剩下的就是主活动了。
在这里插入图片描述
这样就行了。

运行结果

myData.add(new Data(R.drawable.my_image_list,"listview的文本内容" + (i + 1)));

在这里插入图片描述
在这里插入图片描述
完了。

4.文件代码

4.1.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listView_information"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

4.2.list_layout.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:gravity="center"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/image_list"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:src="@drawable/my_image_list"/>
    <TextView
        android:id="@+id/txt_list"
        android:layout_width="0dp"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:text="@string/txt_information"/>

</LinearLayout>

4.3.Data.java

package com.example.listviewadapter;

public class Data {
    private int imageId;
    private String text;

    public Data() {
    }

    public Data(int imageId, String text) {
        this.imageId = imageId;
        this.text = text;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

4.4.MyAdapter.java

package com.example.listviewadapter;

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;

import java.util.LinkedList;

public class MyAdapter extends BaseAdapter {

    private Context mContext;
    private LinkedList<Data> myData;

    public MyAdapter() {}

    public MyAdapter(LinkedList<Data> myData, Context mContext) {
        this.myData = myData;
        this.mContext = mContext;
    }

    @Override
    public int getCount() {
        return myData.size();
    }

    @Override
    public Object getItem(int position) {
        return myData.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null){
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_layout,parent,false);
        }
        ImageView imageView = convertView.findViewById(R.id.image_list);
        TextView textView = convertView.findViewById(R.id.txt_list);
        imageView.setImageResource(myData.get(position).getImageId());
        textView.setText(myData.get(position).getText());

        return convertView;
    }

}

4.5.strings.xml

<resources>
    <string name="app_name">ListViewAdapter</string>
    <string name="txt_information">列表一行的内容</string>
</resources>

4.6.MainActivity.java

package com.example.listviewadapter;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ListView;

import java.util.LinkedList;

public class MainActivity extends AppCompatActivity {

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

        LinkedList<Data> myData = new LinkedList<>();
        for(int i = 0;i < 50;i++){
            myData.add(new Data(R.drawable.my_image_list,"listview的文本内容" + (i + 1)));
        }

        ListView listView = findViewById(R.id.listView_information);
        listView.setAdapter(new MyAdapter(myData,this));
    }
}

好了,如果粘贴代码,记得改包名。

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大唐不良猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值