Android 中 ListView 的基本使用

在这里插入图片描述

1. 常用属性

自定义一个 ListViewActivity 类.

package com.example.hello.listView;

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

import androidx.annotation.Nullable;

import com.example.hello.R;

public class ListViewActivity extends Activity {
    
    

    private ListView lv1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view);
        // 获取 ListView
        lv1 = findViewById(R.id.lv_1);
        lv1.setAdapter(new ListAdapter(ListViewActivity.this));
    }
}

lv1.setAdapter(new ListAdapter(ListViewActivity.this));ListAdapter 是自定义的一个类.

建立一个 activity_list_view.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="match_parent"
    android:orientation="vertical">

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


</LinearLayout>

AndroidManifest.xml 文件内添加内容. 我的 ListViewActivity 类是在 listView 文件夹下.

<activity android:name=".listView.ListViewActivity" />

2. Adapter 接口

自定义一个 ListAdapter 类.

package com.example.hello.listView;

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 com.bumptech.glide.Glide;
import com.example.hello.R;

import java.text.DateFormat;
import java.util.Date;

public class ListAdapter extends BaseAdapter {
    
    

    // 声明
    private Context context;
    private LayoutInflater layoutInflater;

    public ListAdapter(Context context) {
    
    
        this.context = context;
        this.layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
    
    
        return 10;
    }

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

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

    /**
     * 静态类: 封装控件
     */
    static class ViewHolder {
    
    
        private ImageView listIv;
        private TextView listTv1, listTv2, listTv3;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
    
        // 获取控件
        ViewHolder viewHolder = null;
        if (convertView == null) {
    
    
            convertView = layoutInflater.inflate(R.layout.layout_list_item, null);
            viewHolder = new ViewHolder();
            viewHolder.listIv = convertView.findViewById(R.id.list_iv);
            viewHolder.listTv1 = convertView.findViewById(R.id.list_tv1);
            viewHolder.listTv2 = convertView.findViewById(R.id.list_tv2);
            viewHolder.listTv3 = convertView.findViewById(R.id.list_tv3);
            convertView.setTag(viewHolder);
        } else {
    
    
            viewHolder = (ViewHolder) convertView.getTag();
        }
        // 赋值控件
        viewHolder.listTv1.setText("这是一个标题");
        viewHolder.listTv2.setText(DateFormat.getDateTimeInstance().format(new Date()));
        viewHolder.listTv3.setText("这是一个描述");
        // 复制网络照片
        Glide.with(context).load("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=295289102,3688591987&fm=26&gp=0.jpg").into(viewHolder.listIv);
        return convertView;
    }
}

R.layout.layout_list_itemlayout_list_item 是自定义的一个 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="match_parent"
    android:orientation="horizontal"
    android:padding="15dp">

    <ImageView
        android:id="@+id/list_iv"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:contentDescription="@string/beautiful"
        android:scaleType="centerCrop"
        android:src="@mipmap/beautiful" />

    <LinearLayout
        android:id="@+id/list_ll"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:orientation="vertical"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <TextView
            android:id="@+id/list_tv1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:text="@string/beautiful"
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/list_tv2"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:text="@string/time"
            android:textColor="@color/black_low"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/list_tv3"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="fill_vertical"
            android:layout_weight="1"
            android:text="@string/content"
            android:textColor="@color/black_low"
            android:textSize="15sp" />

    </LinearLayout>

</LinearLayout>

3. Demo 演示

在这里插入图片描述

4. 自定义样式

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/orange_low_transparent" />
    <item android:state_pressed="true" android:drawable="@color/orange_low_transparent" />
    <item android:state_selected="true" android:drawable="@color/orange_low_transparent" />
    <item android:drawable="@color/transparent" />
</selector>
<?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="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/lv_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@color/blue"
        android:dividerHeight="2dp"
        android:listSelector="@drawable/bg_list_view"/>

</LinearLayout>

在这里插入图片描述

5. 点击事件

package com.example.hello.listView;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.Nullable;

import com.example.hello.R;

public class ListViewActivity extends Activity {
    
    

    private ListView lv1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view);
        // 获取 ListView
        lv1 = findViewById(R.id.lv_1);
        lv1.setAdapter(new ListAdapter(ListViewActivity.this));
        // 点击事件
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
    
                Toast.makeText(ListViewActivity.this, "点击位置: " + position + 1, Toast.LENGTH_SHORT).show();
            }
        });
        // 长按事件
        lv1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    
    
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    
    
                Toast.makeText(ListViewActivity.this, "长按位置: " + position + 1, Toast.LENGTH_SHORT).show();
                return true;
            }
        });
    }
}

长按返回 true 代表我处理完了, 其他就不需要在处理了.

在这里插入图片描述

在这里插入图片描述

仔细看发现, 界面上面没有 Hello 了.
原因是因为 ListViewActivity 类继承的是 Activity 类.
而正常创建的 Activity 是继承 AppCompatActivity 类的.
其实 AppCompatActivity 类最总继承的也是 Activity 类.
所以推荐 创建的 Activity 继承 AppCompatActivity 类.

6. GridView 的使用操作相差无几

在这里插入图片描述

android:numColumns=“3” 为 3 列.

<?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"
    android:padding="15dp"
    tools:context=".gridView.GridViewActivity">

    <GridView
        android:id="@+id/gv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="3"/>

</LinearLayout>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YKenan/article/details/112727019