了解Android_08之ListView(列表视图)

一、ListView(列表视图)是一种什么样的效果?

  ListView(列表视图)可以将自定义的布局根据一定数量显示在屏幕上。

  比如:

  

 

 

 其中:一张图片和文字就是自定义的布局样式:

<?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/iv1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#000"
        android:scaleType="centerCrop"
    />
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试文字"
        android:textSize="24sp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="40dp"
    />
</LinearLayout>

二、ListView如何展示样式?

<ListView
    android:id="@+id/lv1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:listSelector="@drawable/listview"
/>

其中:listSelector是自定义的一个按压效果:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@color/colorRed"/>
    <item android:state_pressed="true" android:drawable="@color/colorRed"/>
    <item android:state_focused="true" android:drawable="@color/colorRed"/>
</selector>

ListView主要还是通过Java代码来控制:

package com.example.listviewdemo;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.bumptech.glide.Glide;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv1 = findViewById(R.id.lv1);
        lv1.setAdapter(new MyListViewAdapter(this)); //将自定义适配器作为参数传入
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener(){ //单机事件
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                System.out.println("item:"+i+" 单击 "+l);
            }
        });
        lv1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { //长按事件
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                System.out.println("item:"+i+"长按 "+l);
                return true; //true为长按后阻止其它事件发生
            }
        });
    }
    private class MyListViewAdapter extends BaseAdapter{ //继承一个基本的适配器(BaseAdapter)
        private Context mLVAContext; //上下文
        private LayoutInflater mLVALayoutInflater; //布局服务用于从上下文(context)中获取View视图
        public MyListViewAdapter(Context context){
            this.mLVAContext = context; //获取上下文
            this.mLVALayoutInflater = LayoutInflater.from(context); //从上下文中获取布局服务,将来可以获取View视图
        }
        @Override
        public int getCount() { //将自定义的布局显示6次
            return 6;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

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

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            view = mLVALayoutInflater.inflate(R.layout.listview_item,null); //获取自定义布局listview_item的视图
            ImageView iv1 = view.findViewById(R.id.iv1); //获取自定义布局listview_item中的组件
            TextView tv1 = view.findViewById(R.id.tv1);  //获取自定义布局listview_item中的组件
            tv1.setText("被设置后的文本效果"); //设置组件内容
            //设置图片地址
            Glide.with(this.mLVAContext).load("https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1604332215&t=cb2b5ed8ce723d4117196f3ee207a001").into(iv1);
            return view;
        }
    }
}

三、最后实现效果:

posted @ 2020-10-28 10:04  曾经沧海难为水。  阅读(211)  评论(0编辑  收藏  举报