Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)

这篇具有很好参考价值的文章主要介绍了Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要图片集或全部源码请点赞关注收藏后评论区留言~~

列表视图ListView

如果想在页面上直接显示全部列表信息,就要引入新的列表视图ListView,列表视图允许在页面上分行展示相似的数据列表。

列表视图新增的属性与方法如下

divider 指定分割线的图形

dividerHeight 指定分割线的高度

listSelector 指定列表项的按压背景

往列表视图填充数据也很容易,先利用基本适配器实现列表适配器,再调用setAdapter方法设置适配器对象,下面是使用列表视图在界面上展示行星列表的例子

1:修改列表视图的分割线样式

2:修改列表项的按压背景

 Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)

 Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)

下面修改了列表项的点击问题 新增了几个按钮 让界面显得更加美观和用户友好 

 Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)

 最后,代码如下

Java类代码

package com.example.chapter08;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.chapter08.adapter.PlanetListAdapter;
import com.example.chapter08.bean.Planet;
import com.example.chapter08.util.Utils;

import java.util.List;

public class ListViewActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
    private final static String TAG = "ListViewActivity";
    private CheckBox ck_divider;
    private CheckBox ck_selector;
    private ListView lv_planet; // 声明一个列表视图对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view);
        ck_divider = findViewById(R.id.ck_divider);
        ck_selector = findViewById(R.id.ck_selector);
        ck_divider.setOnCheckedChangeListener(this);
        ck_selector.setOnCheckedChangeListener(this);
        List<Planet> planetList = Planet.getDefaultList(); // 获得默认的行星列表
        // 构建一个行星列表的列表适配器
        PlanetListAdapter adapter = new PlanetListAdapter(this, planetList);
        // 从布局视图中获取名叫lv_planet的列表视图
        lv_planet = findViewById(R.id.lv_planet);
        lv_planet.setAdapter(adapter); // 设置列表视图的适配器
        lv_planet.setOnItemClickListener(adapter); // 设置列表视图的点击监听器
        lv_planet.setOnItemLongClickListener(adapter); // 设置列表视图的长按监听器
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        refreshListView(); // 刷新列表视图
    }

    // 刷新列表视图
    private void refreshListView() {
//        lv_planet.setCacheColorHint(Color.TRANSPARENT); // 防止滚动时列表拉黑
        if (ck_divider.isChecked()) { // 显示分隔线
            // 从资源文件获得图形对象
            Drawable drawable = getResources().getDrawable(R.color.red);
            lv_planet.setDivider(drawable); // 设置列表视图的分隔线
            lv_planet.setDividerHeight(Utils.dip2px(this, 5)); // 设置列表视图的分隔线高度
        } else { // 不显示分隔线
            lv_planet.setDivider(null); // 设置列表视图的分隔线
            lv_planet.setDividerHeight(0); // 设置列表视图的分隔线高度
        }
        if (ck_selector.isChecked()) { // 显示按压背景
            lv_planet.setSelector(R.drawable.list_selector); // 设置列表项的按压状态图形
        } else { // 不显示按压背景
            //lv_planet.setSelector(null); // 直接设置null会报错,因为运行时报空指针异常
            // 从资源文件获得图形对象
            Drawable drawable = getResources().getDrawable(R.color.transparent);
            lv_planet.setSelector(drawable); // 设置列表项的按压状态图形
        }
    }

}

 第二个类

package com.example.chapter08;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;

import com.example.chapter08.adapter.PlanetListWithButtonAdapter;
import com.example.chapter08.bean.Planet;

import java.util.List;

public class ListFocusActivity extends AppCompatActivity {
    private final static String TAG = "ListFocusActivity";
    private ListView lv_planet; // 声明一个列表视图对象
    private PlanetListWithButtonAdapter adapter; // 行星列表的列表适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_focus);
        initFocusSpinner(); // 初始化焦点抢占方式的下拉框
    }

    // 初始化焦点抢占方式的下拉框
    private void initFocusSpinner() {
        ArrayAdapter<String> focusAdapter = new ArrayAdapter<String>(this,
                R.layout.item_select, focusArray);
        Spinner sp_focus = findViewById(R.id.sp_focus);
        sp_focus.setPrompt("请选择焦点抢占方式"); // 设置下拉框的标题
        sp_focus.setAdapter(focusAdapter); // 设置下拉框的数组适配器
        sp_focus.setSelection(0); // 设置下拉框默认显示第一项
        // 给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的onItemSelected方法
        sp_focus.setOnItemSelectedListener(new FocusSelectedListener());
    }

    private String[] focusArray = {
            "在子控件之前处理",
            "在子控件之后处理",
            "不让子控件处理",
    };

    class FocusSelectedListener implements AdapterView.OnItemSelectedListener {
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            if (arg2 == 0) {  // 在子控件之前处理
                showListView(ViewGroup.FOCUS_BEFORE_DESCENDANTS); // 显示指定抢占方式的列表视图
            } else if (arg2 == 1) {  // 在子控件之后处理
                showListView(ViewGroup.FOCUS_AFTER_DESCENDANTS); // 显示指定抢占方式的列表视图
            } else if (arg2 == 2) {  // 不让子控件处理,此时才会响应列表项的点击和长按事件
                showListView(ViewGroup.FOCUS_BLOCK_DESCENDANTS); // 显示指定抢占方式的列表视图
            }
        }

        public void onNothingSelected(AdapterView<?> arg0) {}
    }

    // 显示指定抢占方式的列表视图
    private void showListView(int focusMethod) {
        List<Planet> planetList = Planet.getDefaultList(); // 获得默认的行星列表
        // 构建一个行星列表的列表适配器
        adapter = new PlanetListWithButtonAdapter(this, planetList, focusMethod);
        // 从布局视图中获取名叫lv_planet的列表视图
        lv_planet = findViewById(R.id.lv_planet);
        lv_planet.setAdapter(adapter); // 设置列表视图的适配器
        lv_planet.setOnItemClickListener(adapter); // 设置列表视图的点击监听器
        lv_planet.setOnItemLongClickListener(adapter); // 设置列表视图的长按监听器
    }

}

XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp">

        <CheckBox
            android:id="@+id/ck_divider"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="left|center"
            android:text="显示分隔线"
            android:textColor="@color/black"
            android:textSize="17sp" />

        <CheckBox
            android:id="@+id/ck_selector"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="left|center"
            android:text="显示按压背景"
            android:textColor="@color/black"
            android:textSize="17sp" />

    </LinearLayout>

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

    <!--
    <ListView
        android:id="@+id/lv_planet"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:listSelector="@null"
        android:listSelector="@color/transparent" />
        -->

</LinearLayout>

第二个XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="焦点抢占方式:"
            android:textColor="@color/black"
            android:textSize="17sp" />

        <Spinner
            android:id="@+id/sp_focus"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="left|center"
            android:spinnerMode="dialog" />
    </LinearLayout>

    <ListView
        android:id="@+id/lv_planet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:listSelector="@color/transparent" />

</LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~文章来源地址https://www.toymoban.com/news/detail-421106.html

到了这里,关于Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Android入门到项目实战--3.4】—— ListView控件的使用

    【Android入门到项目实战--3.4】—— ListView控件的使用

    目录 一、ListView的简单用法 二、进一步优化ListView界面 三、提升ListView的效率(优化) 四、ListView的点击事件 本篇文章主要讲解最常用的控件之一:ListView的使用。         当我们的程序有大量的数据需要展示的时候,可以借助ListView实现。ListView允许用户上下滑动滚动屏

    2024年02月07日
    浏览(10)
  • 25. 【Android教程】列表控件 ListView

    25. 【Android教程】列表控件 ListView

    在学习了 ScrollView 及 Adapter 两节内容之后,大家应该对 ListView 有了一些基本的了解,它是一个列表样式的 ViewGroup,将若干 item 按行排列。ListView 是一个很基本的控件也是 Android 中最重要的控件之一。它可以帮助我们完成多个 View 的垂直排列并支持滚动显示效果,而它比 Scr

    2024年04月17日
    浏览(9)
  • uni-app Android studio 本地打包 【图文讲解】

    uni-app Android studio 本地打包 【图文讲解】

    需要修改文件列表 appsrcmainresvaluesstrings.xml 修改app名称 appsrcmainresvaluesAndroidManifest.xml 修改 包名 以及 uni-app 开发者后台生成的 离线打包可key simpleDemo 目录下的 准备安卓开发环境 (这里忽略,之前有文章讲解) 安卓开发环境 https://nativesupport.dcloud.net.cn/AppDocs/download/an

    2024年02月03日
    浏览(12)
  • Android studio 之 ListView

    ListView 绑定的适配器是 BaseAdapter。 在MyAdapter类中的getView方法中,我们注意到,上面的写法在每个视图出现时都会执行,有多少个item就会调用多少次 getView() 如果item太多就会很浪费资源!! 在 getView 方法中,首先检查 convertView 是否为空。 如果为空,表示当前屏幕上没有可复

    2024年01月23日
    浏览(13)
  • Android Studio实现简单ListView

    Android Studio实现简单ListView

    效果图 MainActivity PartBean 建议重新建一个软件包 PartAdapter 适配器 建议重新建一个适配器包 activity_main.xml 顶部标题和 ListView pat_manger_item ListView中数据的展示格式

    2024年02月13日
    浏览(10)
  • Android Studio安卓开发--ListView学习整理

    Android Studio安卓开发--ListView学习整理

    ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。 (1)activity_main.xml布局中加入ListView控件:(先占满整个布局的空间) (2)MainActivity.java中使用ListView展示大量数据: 使用ArrayAdapter泛型类(指定为String)将数据

    2024年01月20日
    浏览(8)
  • Android Studio开发实战:从零基础到App上线

    第1章  Android开发环境搭建 1     1.1  Android开发简介 1         1.1.1  Android的发展历程 1         1.1.2  Android Studio的发展历程 2     1.2  搭建Android Studio开发环境 2         1.2.1  计算机配置要求 2         1.2.2  安装Android Studio 3         1.2.3  下载Android的S

    2024年02月20日
    浏览(13)
  • Android Studio初学者实例:ListView学习--购物商城

    Android Studio初学者实例:ListView学习--购物商城

    此实践案例由课堂上学习ListView控件提供。先上效果图,使用Listview控件实现一个简单的购物商城界面 显然,界面由Textview与ListView构成,看一下XML代码 父布局使用LinearLayout布局,我也是比较喜欢用该布局的,使用orientation属性来设置布局的方向,此时vertical即为垂直方向,例

    2024年02月06日
    浏览(14)
  • Android -- 下拉列表、列表视图、网格视图

    Android -- 下拉列表、列表视图、网格视图

    Spinner 用于从一串列表中选择某项,功能类似于单选按钮的组合 下拉列表的展示 方式有两种,一种是在当前下拉框的正下方弹出列表框,此时要把spinnerMode属性设置为 dropdown,另一种是在页面中部弹出列表对话框,此时要把spinnerMode属性设置为dialog。 dropdown 下拉模式       

    2023年04月08日
    浏览(15)
  • Android Studio开发入门教程:如何更改APP的图标?

    Android Studio开发入门教程:如何更改APP的图标?

    环境:Windows10、Android Studio版本如下图、雷电模拟器。 推荐图标库 默认APP图标 将新图标拉进src/main/res/mipmap-hdpi文件夹(一般app的icon图标是存放在mipmap打头的文件夹下的) 更改src/main/AndroidManifest.xml文件内容 引入我们刚刚导入的新图标 保存并运行,在雷电模拟器查看效果

    2024年02月03日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包