Android中listview布局,自定义adapter,长按,点击,退出的demo

custom_ListView:具有自定义布局和适配器的Android上ListView的简单演示 custom_ListView 具有自定义布局和适配器的Android上ListView的简单演示 立即下载

首先需要listview的xml文件,并且新建一个item的布局样式。
完成以后将样式填充至listview中,然后在activity中新建数据源。基本的实现思路就是这样了,先看下效果图:

这里写图片描述

中间包含以下知识点:
①:自定义适配器
②:点击listview颜色发生变化
③:长按listview跳转界面 (intent传值 id以及name)
④:点击返回按钮提示对话框

接下来上传实现步骤代码
1:首先listview布局 list_view_layout.xml布局文件

<ListView
        android:id="@+id/list_view_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:listSelector="@drawable/listview_color_selector"><!--设置点击颜色-->
    </ListView>

2:item布局样式,item_view_layout.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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:padding="5dp"
        android:gravity="center_vertical"
        android:descendantFocusability="blocksDescendants">  //抢夺焦点
        <ImageView
            android:id="@+id/logo"
            android:layout_width="70dip"
            android:layout_height="70dip"
            android:src="@drawable/timg1"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="5dp"
            android:layout_weight="1">
            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="知乎网"
                android:layout_marginTop="10dip"/>
            <TextView
                android:id="@+id/vertion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="版本:1.0.1"
                android:textSize="10sp"
                android:textColor="#999"
                android:layout_marginTop="6dp"/>
            <TextView
                android:id="@+id/size"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="大小:45M"
                android:textSize="10sp"
                android:textColor="#999"
                android:layout_marginTop="3dp"/>
        </LinearLayout>
        <Button
            android:layout_width="75dip"
            android:layout_height="35dip"
            android:background="@drawable/listview_button_selector"
            android:text="下载"/>
    </LinearLayout>

</LinearLayout>

3:在mainactivity中实现插入数据源,新建适配器,listview点击长按事件,退出事件。(可以使用simpleadapter本文我采用自定义适配器完成的) 代码片段都有相关的注释,就不一一解释了。

package com.yongninggo.listview;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {

    //声明listview,数据源和适配器
    private ListView listView;
    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    Map<String,Object> map = new HashMap<String, Object>();

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

    private void initView() {
        listView = (ListView) findViewById(R.id.list_view_layout);

        //添加数据源
        map.put("logo",R.drawable.timg1);
        map.put("title","知乎网");
        map.put("vertion","版本:1.0.1");
        map.put("size","大小:45M");
        list.add(map);

        map = new HashMap<String, Object>();
        map.put("logo",R.drawable.timg2);
        map.put("title","微信");
        map.put("vertion","版本:1.0.1");
        map.put("size","大小:45M");
        list.add(map);

        map = new HashMap<String, Object>();
        map.put("logo",R.drawable.timg3);
        map.put("title","QQ");
        map.put("vertion","版本:1.0.1");
        map.put("size","大小:45M");
        list.add(map);

        map = new HashMap<String, Object>();
        map.put("logo",R.drawable.timg4);
        map.put("title","微博");
        map.put("vertion","版本:1.0.1");
        map.put("size","大小:45M");
        list.add(map);

        map = new HashMap<String, Object>();
        map.put("logo",R.drawable.timg5);
        map.put("title","支付宝");
        map.put("vertion","版本:1.0.1");
        map.put("size","大小:45M");
        list.add(map);

        //SimpleAdapter适配器
        /*SimpleAdapter simpleAdapter = new SimpleAdapter(
                this,
                list,
                R.layout.item_view_layout,
                new String[]{"logo","title","vertion","size"},
                new int[]{R.id.logo,R.id.title,R.id.vertion,R.id.size}
        );*/
        //接入自定义适配器
        Myadapter myadapter = new Myadapter(this);
        myadapter.setList(list);

        //将数据存放进listview中
        listView.setAdapter(myadapter);

        //给listview长按和点击两个事件
        listView.setOnItemClickListener(this);
        listView.setOnItemLongClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       // Toast.makeText(this,"点击:" + position,Toast.LENGTH_SHORT).show();
        //点击listview跳转界面
        Intent intent = new Intent(this,intent_Activity.class);
        intent.putExtra("index",""+position);
        Map<String,Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
        intent.putExtra("title",""+map.get("title"));
        startActivity(intent);

    }

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
       // Toast.makeText(this,"长按:" + position,Toast.LENGTH_SHORT).show();
        //长按listview跳出对话框
        final String [] arr = {"复制","删除","举报"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.timg1);
        builder.setTitle("操作");
        builder.setItems(arr, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"您选择了:"+arr[which],Toast.LENGTH_SHORT).show();
            }
        });
        builder.show();
        return true;
    }

    //退出程序提示确认
    @Override
    public void onBackPressed() {
        //super.onBackPressed();
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.timg2);
        builder.setTitle("操作");
        builder.setMessage("您确定退出吗?");
        builder.setNegativeButton("取消",null);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        builder.show();
    }
}

4:点击listview进行intent传值,一个intentActivity,一个intent布局文件

public class intent_Activity extends AppCompatActivity {

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

        String index = getIntent().getStringExtra("index");
        String title = getIntent().getStringExtra("title");
        TextView info = (TextView) findViewById(R.id.intent);
        info.setText("序列号:"+index+"   软件名:"+title);
    }
}
intent布局文件就一个textview + id就可以了

5:接下来就是自定义一个适配器啦。继承BaseAdapter。

public class Myadapter extends BaseAdapter {
    List<Map<String,Object>> list ;
    LayoutInflater inflater ;

    public Myadapter(Context context) {
        this.inflater = LayoutInflater.from(context);
    }

    public void setList(List<Map<String, Object>> list) {
        this.list = list;
    }
    @Override
    public int getCount() {
        return list.size();
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        viewHolder holder = null;  //二级优化定义
        if (convertView == null){  //listview一级优化
            convertView = inflater.inflate(R.layout.item_view_layout,null);
            holder = new viewHolder();
            holder.logo = (ImageView) convertView.findViewById(R.id.logo);
            holder.title = (TextView) convertView.findViewById(R.id.title);
            holder.vertion = (TextView) convertView.findViewById(vertion);
            holder.size = (TextView) convertView.findViewById(size);
            convertView.setTag(holder);
        } else {
            holder = (viewHolder) convertView.getTag();
        }

        Map map = list.get(position);
        holder.logo.setImageResource((Integer) map.get("logo"));
        holder.title.setText((String) map.get("title"));
        holder.vertion.setText((String) map.get("vertion"));
        holder.size.setText((String) map.get("size"));

        return convertView;
    }
    public class viewHolder{
        ImageView logo;
        TextView title;
        TextView vertion;
        TextView size;
    }
}

目前为止,一个简单的listview就成功实现了,源码下载地址:listview的简单实现

自定义ListView(适配器和布局) 个人学习整理demo,分享出来和大家一起学习。 立即下载

相关推荐

ListView实现两种布局

一个简单的聊天界面示例,来演示如何在ListView的getView方法里更优雅地实现加载不同的布局。

安卓开发入门基础之使用adapter实现对Listview的点击效果

list.xml布局构思 总体是垂直的线性布局,并且需要加上android:descendantFocusability="blocksDescendants"来夺取焦点 主要为了实现点击list内的每一项以及点击按钮都有不同的反应 里面放一个textview做标题,一个listview即可 bg.xml 作为Listview每一项的格式,总体是水平(横向)的线性布局 博主往这里面放了1个i...

无痕坚守本心的博客 543

自定义万能Adapter和自定义多变布局可交互ListView

ListView与Adapter是Android一组很常用的组合,本篇博客旨在探究它们的各种应用场景

Adapter(二)——ListView的点击和长按事件

相信大家对MVC模式并不陌生,那对于Adapter来说,对应为: m:model(数据模型)--------数据源 v:view(显示的视图控件)--------AdapterView c:controller(控制器)--------adapter   MVC设计模式的特点:将前端显示和后端数据相互分离。 ListView: Item的点击事件:setOnItemClickList...

dsd的博客 966

WPF的ListView控件自定义布局用法实例

主要介绍了WPF的ListView控件自定义布局的方法,结合实例形式分析了WPF中ListView控件的布局方法,需要的朋友可以参考下

单细胞多组学数据整合分析实战:从原始数据到跨平台合并

本文详细介绍了单细胞多组学数据整合分析的实战流程,从原始数据处理到跨平台合并分析。通过Seurat和Harmony等工具的应用,帮助研究者有效解决批次效应问题,保留真实的生物学信号。文章包含代码示例和常见问题解决方案,特别适合需要进行单细胞合并分析的研究人员参考。

weixin_30752699的博客 89

自定义ListView布局

自定义ListView布局

Qxnedy的博客 904

LEC/FORMAL --- PARTIII debug

lec(logic equivalence checking)又叫formal check,是对ic design的综合,PR前后的设计进行逻辑对比检查的工具/手段,保证综合不改变rtl原始的logic function。目前用的较多的就是C家的formal工具。接下来介绍一下lec过程中遇到的问题以及debug手段。...

sinat_27691203的博客 7707

LIstView自定义布局

这是我的第一篇在优快云博客写的内容。是关于在ListView中如何使用自定义的布局的问题。(本笔脑瓜不太好用,所以花了两天的时间去大概的弄明白了ListView的工作原理)我做了一个简单的聊天界面工参考,先放效果图跟代码! 效果图(Back按钮是生成左边文字,Go生成右边文字): 这是主函数类:MainActivitypackage com.example.chat;import ja

bigname22的博客 2025

实践指南——【SPSS操作解析】线性混合效应模型在重复测量数据中的应用

本文详细解析了线性混合效应模型在重复测量数据分析中的应用,并提供了SPSS操作指南。文章阐述了该模型如何通过区分固定效应与随机效应,有效处理数据非独立性和缺失值问题,从而获得更可靠的统计推断。

oo7890的博客 550

7.7 数据分析助手:用AI洞察业务数据价值

摘要:AI数据分析助手构建指南 本文介绍了如何构建AI数据分析助手,帮助企业从业务数据中提取价值。系统包含四大核心模块:自然语言理解模块解析用户查询意图,查询规划模块转换为SQL语句,数据可视化模块生成图表,以及洞察生成模块提供深度分析。文章通过销售数据分析助手案例,展示了从数据库准备到自然语言处理的完整实现流程,包括示例代码和系统架构图。该解决方案可降低数据分析门槛,让业务人员直接参与数据探索,提升决策效率。

yonggeit的博客 4092

RecyclerView适配器加点击长按事件

RecyclerView多条目里面包含了点击和长按事件 ,事件是在onBindViewHolder中的 public class MyAdapter extends RecyclerView.Adapter&lt;MyAdapter.MyViewHolder&gt; { private Context context; private List&lt;ShowBean.Data...

冲天猪 542

PX4从放弃到精通(三):使用qt编译PX4

1 下载px4源码 2在Firmware所在目录下执行 mkdir Firmware-build cd Firmware-build cmake …/Firmware -G “CodeBlocks - Unix Makefiles” -DCONFIG=nuttx_px4_fmu-v5_default 第三步最后的px4_fmu-v5_default根据自己的情况修改 执行完后如图 打开QT 点击打开工程 选择源码的CmakeLists.txt文件 选择imported Kit 打开项目那一栏,构建目

超维空间科技的博客 1万+

android 在fragment中使用listview,android,在fragment中使用listview,不使用listfragment

public class LeftFragment extends Fragment{private ListView listView;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inf...

weixin_33881426的博客 1724

HDR 人像肤色稳定实战:AE/AWB/ToneMap 冲突解耦与优先级裁决

人像 HDR 最容易“翻车”的就是**肤色飘**:AE 抢亮度、AWB 拉白点、TM 又在肩部压高光,三方各自“对”却合起来“错”。本文给出一套**工程可落地**的裁决策略:以**肤色 ROI 锚点**为最高约束,AE 先对脸部入射照度收敛,AWB 在**肤色先验 + 光源模型**下缓变,TM 采用**色相保持 + 中灰/肤色双锚**且时域一致化。配套**阈值与回归**(ΔE00、亮度漂移 RMS、频闪注入),把“主观对”的口径落到**可度量**,并给出逆光、多脸、霓虹等极端场景的**例外分流**。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1198

【腾讯小龙虾WorkBuddy专栏04】一文搞懂WorkBuddy的「专家」和「专家团」

WorkBuddy专家与专家团:专业级AI协作解决方案 WorkBuddy的专家(Expert)与专家团(Expert Team)功能颠覆了通用AI的局限性,提供角色化、可交付的专业服务。 核心优势 专家:深度垂直领域的AI顾问,具备人设、方法论、工具链,如全栈开发专家能直接交付完整项目,而非代码片段。 专家团:多智能体协作,自动拆解复杂任务(如竞品分析、全栈开发)并分发给对应角色,并行执行后整合输出,效率提升显著。 使用场景 单专家:解决专业问题(如SQL优化、UI设计)。

AI人人懂 2016

利用convertView优化ListView性能

这里提到的ListView只是作为一个典型代表 其实在Android中 采用类似Adapter机制的GridView等都是可以适用的 而ListView应该是用得最多的 所以就以它来举例 大家都知道 将ListView和Adapter绑定以后 其实也就是将数据源和控件显示绑定在一起 而每次需要显示ListView的时候 里面的item其实是Adapter提供的 通过的就是重要的get

cc_lq的专栏 1万+

家用智能监控摄像机如何使用NAS进行存储/备份(小米智能摄像机如何解决群晖 / 飞牛 NAS 识别失败、文件目录不显示问题)

小米摄像头NAS存储总出问题?🤯 别慌!本文揭秘NAS底层逻辑,群晖、飞牛实战指南。手把手教你排查解决所有难题,轻松搞定监控录像安全备份!🔒

XiaoqiangClub的博客 2693

利用convertView优化ListView和GirdView的性能 (Adapter的使用)

这里提到的ListView只是作为一个典型代表 其实在Android中 采用类似Adapter机制的GridView等都是可以适用的 而ListView应该是用得最多的 所以就以它来举例 大家都知道 将ListView和Adapter绑定以后 其实也就是将数据源和控件显示绑定在一起 而每次需要显示ListView的时候 里面的item其实是Adapter提供的 通过的就是重要的get

Kent的专栏 1066

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ListView的优化

这里提到的ListView只是作为一个典型代表 其实在Android中 采用类似Adapter机制的GridView等都是可以适用的 而ListView应该是用得最多的 所以就以它来举例 大家都知道 将ListView和Adapter绑定以后 其实也就是将数据源和控件显示绑定在一起 而每次需要显示ListView的时候 里面的item其实是Adapter提供的 通过的就是重要的getVi

wsf123lcj的博客 344

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android利用convertView优化ListView性能

基本的getView写法 Java代码 public View getView(int position, View convertView, ViewGroup parent) { View view = new View(); //通过inflate等找到布局 然后findViewById等 设置各个显示的item return view; } 而在ListVie

夏皓 3277

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[转载]Android利用convertView优化ListView性能

本的getView写法Java代码public View getView(int position, View convertView, ViewGroup parent) {View view = new View();//通过inflate等找到布局 然后findViewById等 设置各个显示的itemreturn view;}而在ListView滑动的过程中 很容易就会发现每次getVie...

weixin_34203832的博客 67
上一篇: windows10下使用Charles进行移动端抓包
下一篇: 在应用层调用OKhttp进行数据请求,更新View
Colt"
博客等级 码龄9年 30粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值