程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

【Android】 ListView的使用

发布于2021-05-30 07:39     阅读(1494)     评论(0)     点赞(24)     收藏(0)


简介

ListView

ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目。还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示。另外,还可管理列表中项目的排序方法和选定项目的外观。

Adapter适配器

adapter是数据与ui之间的桥梁,它把后台数据与前端ui连接到一起,是一个展示数据的载体。

代码实操

  • 主要步骤

    • 创建ListView的子项

    • 创建一个Adapter(适配器)对象

    • 创建ListView对象,并且把Adapter装进去


创建ListView的子项

  • 我们可以发现他的可变的几个变量就是商品名称,商品价格以及图片,所以我们可以创建一个类来存储数据
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <TextView
        android:id="@+id/good"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="65dp"
        android:layout_marginTop="65dp"
        android:text="商品名称:" />

    <TextView
        android:id="@+id/goodname"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="129dp"
        android:layout_marginTop="65dp"
        android:text="默认" />

    <TextView
        android:id="@+id/price"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="65dp"
        android:layout_marginEnd="154dp"
        android:text="价格:" />

    <TextView
        android:id="@+id/pricenum"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="65dp"
        android:layout_marginEnd="90dp"
        android:text="0.0" />

    <Button
        android:id="@+id/buy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="45dp"
        android:text="购买" />

    <ImageView
        android:id="@+id/img"
        android:layout_width="59dp"
        android:layout_height="45dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="-1dp"
        android:layout_marginTop="45dp"
        tools:srcCompat="@tools:sample/avatars" />


</RelativeLayout>

效果图
在这里插入图片描述


自定义Production类

public class Production {
    private String title;
    private Double price;
    private Integer imgId;


    public Production(String title, Double price, Integer imgId) {
        this.title = title;
        this.price = price;
        this.imgId = imgId;
    }

    public void set(String title, Double price, Integer imgId) {
        this.title = title;
        this.price = price;
        this.imgId = imgId;
    }

    public Production() {
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getIngId() {
        return imgId;
    }

    public void setIngId(Integer imgId) {
        this.imgId = imgId;
    }
}

自定义适配器对象

  • 为什么是有参构造?因为在ListviewActivity中可以直接将数据和context传给适配器
  • getCount方法是返回总行数的,也就是数据的条数
  • getItem返回当前的行的信息
  • getItemId返回当前的位置,即当前在第几行
  • getView在这里面进行数据的拼装
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.androidtest.R;
import java.util.List;

public class MyAdapter extends BaseAdapter {
    private List<Production> productions = null;
    private Context context = null;

    public MyAdapter(List<Production> productions, Context context) {
        super();
        this.productions = productions;
        this.context = context;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //获取到ListView的子项
        convertView = LayoutInflater.from(context).inflate(R.layout.activity_list_view_item, null);
        //获取组装item控件,这里是一个图片,俩个文本
        ImageView tv_img = convertView.findViewById(R.id.img);
        TextView tv_title = convertView.findViewById(R.id.goodname);
        TextView tv_price = convertView.findViewById(R.id.pricenum);
        Button purchase = convertView.findViewById(R.id.buy);
        //待组装的每一个item的bean,从bean中取出数据
        Production production = productions.get(position);
        Integer imgId = production.getIngId();
        String title = production.getTitle();
        Double price = production.getPrice();
        //设置数据
        tv_img.setImageResource(imgId);
        tv_title.setText(title);
        tv_price.setText(String.valueOf(price));

        purchase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "点的是第" + (position + 1) + "行", Toast.LENGTH_LONG).show();
            }
        });
        return convertView;
    }
}

ListViewActivity

  • 在这里主要负责数据的传输和适配器的绑定
import androidx.appcompat.app.AppCompatActivity;

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

import com.example.androidtest.R;

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

public class ListViewActivity extends AppCompatActivity {

    private ListView listView;
    private List<Production> productions = null;

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

        listView = findViewById(R.id.mylistview);
        //主要的作用是封装数据
        String[] title = {"商品1", "商品2", "商品3", "商品4", "商品5", "商品6"};
        double[] price = {1.11, 2.22, 3.33, 4.44, 5.55, 6.66};
        int[] imgId = {R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher};
        productions = new ArrayList<>();
        for (int i = 0;i<title.length;i++){
            Production production = new Production();
            production.set(title[i],price[i],imgId[i]);
            productions.add(production);
        }
        //将数据和context通过自定义Adapter的构造方法传给Adapter
        MyAdapter adapter = new MyAdapter(productions,this);
        listView.setAdapter(adapter);
    }
}
  • xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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=".ListView.ListViewActivity">
    
        <ListView
            android:id="@+id/mylistview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>
    
  • 结果
    在这里插入图片描述




所属网站分类: 技术文章 > 博客

作者:西小口到了吗

链接:http://www.qianduanheidong.com/blog/article/115859/66292b849dcfa175558b/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)