You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

创建一个水平和垂直可展开的ListView

要创建一个水平和垂直可展开的ListView,你可以使用NestedScrollView和RecyclerView组合在一起。下面是一个示例代码:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 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"
    android:fillViewport="true"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="Section 1"
            android:textStyle="bold" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/list1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/title2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="Section 2"
            android:textStyle="bold" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/list2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</androidx.core.widget.NestedScrollView>

MainActivity.java:

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

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

public class MainActivity extends AppCompatActivity {

    private RecyclerView list1, list2;
    private List<String> data1, data2;
    private boolean isList1Expanded, isList2Expanded;

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

        list1 = findViewById(R.id.list1);
        list2 = findViewById(R.id.list2);

        data1 = new ArrayList<>();
        data1.add("Item 1");
        data1.add("Item 2");
        data1.add("Item 3");

        data2 = new ArrayList<>();
        data2.add("Item A");
        data2.add("Item B");
        data2.add("Item C");

        final LinearLayoutManager layoutManager1 = new LinearLayoutManager(this);
        final LinearLayoutManager layoutManager2 = new LinearLayoutManager(this);

        final ListAdapter adapter1 = new ListAdapter(data1);
        final ListAdapter adapter2 = new ListAdapter(data2);

        list1.setLayoutManager(layoutManager1);
        list1.setAdapter(adapter1);

        list2.setLayoutManager(layoutManager2);
        list2.setAdapter(adapter2);

        adapter1.setOnItemClickListener(new ListAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                if (isList1Expanded) {
                    data1.remove(position + 1);
                    adapter1.notifyItemRemoved(position + 1);
                } else {
                    data1.add(position + 1, "Subitem " + (position + 1));
                    adapter1.notifyItemInserted(position + 1);
                }
                isList1Expanded = !isList1Expanded;
            }
        });

        adapter2.setOnItemClickListener(new ListAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                if (isList2Expanded) {
                    data2.remove(position + 1);
                    adapter2.notifyItemRemoved(position + 1);
                } else {
                    data2.add(position + 1, "Subitem " + (position + 1));
                    adapter2.notifyItemInserted(position + 1);
                }
                isList2Expanded = !isList2Expanded;
            }
        });
    }
}

ListAdapter.java:

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {

    private List<String> data;
    private OnItemClickListener listener;

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public ListAdapter(List<String> data) {
        this.data = data;
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view);
    }

    @
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文

下面按照 MAD 的构成要点逐步展开,帮助大家快速了解 MAD 的技术理念。如果大家对其中的语言、工具包或框架产生了兴趣,一定要在日后的开发中尝试和掌握。## 内容前瞻1. 【Modern Android Development】讲述 An... 可让更轻松地创建和预览和调试动画。`Layout Inspector` 则可以查看某进程某画面的详细布局,完整展示 View 树的各项属性。在不方便代码调试或剖析其他 App 的情况下非常好用。**同时已经支持直接检查 Compose 编...

借助 MAD 助力你的 Android 应用开发|社区征文

**可以信赖**:汇聚 Google 在 Android 行业十余年的前沿开发经验- **入门友好**:提供大量 Demo 和参考文档,适用于不同阶段不同规模的项目- **高效启动**:通过 Jeptack 可以迅速搭建你的项目- **自由选... 我们在项目中提倡非必要不使用 `MutableList` 这样的 Mutable 类型,可以减少 `ConcurrentModificationException` 等多线程问题的发生,同时更重要的是避免了因为 Item 篡改带来的数据一致性问题:```kotlinviewMo...

字节前端分享|酷炫的可视化大屏代码开源了!

辅助装饰通常围绕着图元和组件展开,对图元的辅助装饰负责突出数据,对组件的装饰则负责个性化展示。 **/ 实现揭秘 /** **1.图元装饰** 由于装饰的位置强依赖于图元,在大屏侧无法准... dataView) => { return ctx.valueToX([datum["beinirRbfVnf"]]); // 自定义x映射 }, y: (datum, ctx, elements, dataView) => { ...

一个不会绘画的我遇到AI绘画的年代 | 社区征文

就在我和图像模型的反复拉扯中,它就会逐渐建立起猫、狗和对应图像的联系,然后它还具备对猫、狗的判断能力1. 这就是所谓的图像模型 图像模型经过的无数类别的对应训练,它就构建了一张庞大的文本到图像的对... 因此就需要一个在线的 AI 绘画平台,对于这种情况,就有两种解决方案,我最推荐下面的几类方案 - 方案一:自己搭建 - colab 搭建方法,这是借助 Google Colab 平台搭建,不需要花钱,但是空间容量很小,只能...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

创建一个水平和垂直可展开的ListView-优选内容

2024年03月
仍与数据源有依赖; 手动更新的标签: 完全独立,不会因上游档案的更新而自动重新计算,如需更新,用户需手动触发。 优化 运算标签赋值逻辑优化,提升数据计算准确性。优化后,如果用户在任意字段(标签/属性)上的对应值为null,该用户最终运算结果为null。 用户分群 更新类型 功能描述 产品截图说明 新增 规则创建用户分群模块支持多主体圈选(最多同时支持三个主体)。快速建立人、店、货之间的关系链路,轻松实现精准人货匹配,人...
MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文
下面按照 MAD 的构成要点逐步展开,帮助大家快速了解 MAD 的技术理念。如果大家对其中的语言、工具包或框架产生了兴趣,一定要在日后的开发中尝试和掌握。## 内容前瞻1. 【Modern Android Development】讲述 An... 可让更轻松地创建和预览和调试动画。`Layout Inspector` 则可以查看某进程某画面的详细布局,完整展示 View 树的各项属性。在不方便代码调试或剖析其他 App 的情况下非常好用。**同时已经支持直接检查 Compose 编...
数据结构
取值如下: StmtDMLInsert StmtDMLUpdate StmtDMLDelete StmtDDLAll StmtDDLAlterTable StmtDDLAlterView StmtDDLCreateFunction StmtDDLCreateIndex StmtDDLCreateProcedure StmtDDLCreateTable StmtDDLCreateView... 连接或展开通配符失败,请检查连通性或重试 ConvertPostPaidToPrePaid名称 类型 是否必选 描述 示例值 Times Integer 是 包年包月的购买时长,支持 1、2、3、4、5、6、7、8、9、12、24 和 36 取值,单位:月。 3 Auto...
借助 MAD 助力你的 Android 应用开发|社区征文
**可以信赖**:汇聚 Google 在 Android 行业十余年的前沿开发经验- **入门友好**:提供大量 Demo 和参考文档,适用于不同阶段不同规模的项目- **高效启动**:通过 Jeptack 可以迅速搭建你的项目- **自由选... 我们在项目中提倡非必要不使用 `MutableList` 这样的 Mutable 类型,可以减少 `ConcurrentModificationException` 等多线程问题的发生,同时更重要的是避免了因为 Item 篡改带来的数据一致性问题:```kotlinviewMo...

创建一个水平和垂直可展开的ListView-相关内容

SaaS-发版日志(2024年前)

后续看板空间针对管理员角色只展示“自主创建&被分享&被授权&主动收藏”四类看板;如需查看更多其他看板,管理员用户可通过两种方式获取全量看板:应用管理-看板中心-看板管理进行搜索查看,或者点击被分享筛选,展示全... 具体可以参考:事件分析 看板新增了文本框组件,可以在文本框中添加文字描述信息;文本框中支持改变字体颜色、背景颜色、超链接。拥有看板编辑权限的用户可以新建、编辑、删除文本框。 看板图表尺寸拉伸,最大可以调...

一个不会绘画的我遇到AI绘画的年代 | 社区征文

就在我和图像模型的反复拉扯中,它就会逐渐建立起猫、狗和对应图像的联系,然后它还具备对猫、狗的判断能力1. 这就是所谓的图像模型 图像模型经过的无数类别的对应训练,它就构建了一张庞大的文本到图像的对... 因此就需要一个在线的 AI 绘画平台,对于这种情况,就有两种解决方案,我最推荐下面的几类方案 - 方案一:自己搭建 - colab 搭建方法,这是借助 Google Colab 平台搭建,不需要花钱,但是空间容量很小,只能...

字节跳动自研万亿级图数据库 & 图计算实践

作为一个工具,图数据对外提供的接口都是围绕这些元素展开。**图数据库本质也是一个存储系统**,它和常见的 KV 存储系统、MySQL 存储系统相比,主要区别在于目标数据的逻辑关系不同和访问模式不同,对于数据内在关... Linkedln 在 KV 之上构建了 Social Graph 服务;微博是基于 Redis 构建了粉丝和关注关系。字节跳动的 Graph 在线存储场景, 其需求也是有自身特点的,可以总结为:* **海量数据存储**:百亿点、万亿边的数据规模;...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

LAS Spark 在 TPC-DS 的优化揭秘

里面有一个 sum 如下: ``` sum((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt+ss_ext_sales_price)/2) year_total ``` 当前规则下, 生成的 plan 是: ``` MakeDecima... 避免构建 BloomFilter 的开销大于过滤大表数据带来的收益。此外,我们还实现了将 BloomFilter 下推到 scan 层,在 TPC-DS 10T 数据集上命中 Query 能减少 80% 以上的 scan 数据量。![picture.image](https://p6...

基于 Apache Calcite 的多引擎指标管理最佳实践|CommunityOverCode Asia 2023

国内业务可以做到但会增加维护的 overhead,且国际化业务不可能办到,毕竟不可能枚举出全球的所有城市;而使用 View 会导致字段和表产生冗余,权限也需要单独维护。字节跳动对权限的管理非常严格,用户不可能接受冗余的... 但视图本身会产生冗余的字段和表,从而给鉴权带来负担。但列级别的视图其实是把整个表级别的视图粒度切细,可以按照列来分,在真正查询时也就像表视图一样展开,这样就可以避免冗余字段。用户需要哪一个字段或哪一个指...

LAS Spark 在 TPC-DS 的优化揭秘

里面有一个 sum 如下````sum((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt+ss_ext_sales_price)/2) year_total````当前规则下, 生成的 plan 是````MakeDecimal(Sum(UnScaledValue((ss_ext... 避免构建 BloomFilter 的开销大于过滤大表数据带来的收益。此外,我们还实现了将 BloomFilter 下推到 scan 层,在 TPC-DS 10T 数据集上命中 Query 能减少 80% 以上的 scan 数据量。![picture.image](https://p6-...

火山引擎 DataLeap 构建Data Catalog系统的实践(三):关键技术与总结

构建一个好的Data Catalog系统,需要考虑的核心产品设计和技术设计有很多。篇幅所限,本文只概要介绍技术设计中最核心重要的部分,更多细节展开可参照后续的文章。## 数据模型统一将不同元数据的数据模型统一,是降... 比如对于新建的metadata,转换成CreateEvent。概念上对齐Flink中的某一种自定义的ProcessFunction。- **Sink**:接收Event Generate Operator的输出,将差异的metadata写入Ingestion Service。概念上对齐Flink的si...

数据探索

某次会话的全部上报信息 查看具体某一类事件在某个时间段内的全部上报信息 通过Session - View - Event 的多级结构深入且精准的还原用户访问,解决线上问题 调查影响小程序启动和加载的具体资源、请求、setData或用... 通过筛选具体类型的事件可以搜索事件关键词以过滤事件。 单击事件列表可以直接展开二级菜单,进一步检查更底层的上报。 主体下方为具体事件上报按照从现在到以前的时序排序的表格,表格各列展示了当前事件的部分上...

干货 | ClickHouse增强计划之“查询优化器”

**详细介绍我们是如何构建ClickHouse的查询优化器。** ![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/52e9931c240944de8b7e3d331358570f~tplv-tlddhu82om-im... 用于对改写完的 AST 进行语义的分析和验证。Analyzer 区分 ANSI SQL 和 Clickhouse SQL 两种模式。**QueryRewriter 针对 ANSI SQL 的改写主要有:*** With CTE/view 展开;* UDF 展开;* 特定函数的改写,...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询