Android关于ListView的总结--使用ListActivity

Shopee App加密算法逆向实战:从抓包到libshpssdk.so的深度解析 本文详细解析了Shopee App加密算法的逆向过程,从网络抓包发现加密参数入手,通过Frida动态Hook定位到Java层关键方法,并深入追踪至Native层的libshpssdk.so核心函数。文章结合实战演示了如何利用Unidbg模拟执行环境进行算法分析与验证,并探讨了核心参数生成逻辑及风控规避要点,为移动安全与逆向工程研究提供了完整的技术路径。 阅读详情
ListActivity是一个专门显示ListView的Activity类,它内置了ListView对象,实现数据源的绑定与显示,数据源通常会是一个array或者一个拥有查询结果的cursor.  只要我们设置了数据源,ListView就会自动地显示出来。

   ListActivity本身有一个默认的layout,其中包含一个全屏的list。如果用默认的layout,必须在onCreate()中注释掉setContentView()那一句。 

   虽然ListActivity内置ListView对象有默认的layout,但我们依然可以使用custom view,通过在onCreate()里面调用setContentView(resourcesid)。不过要注意的是,在自定义的Layout里面,必须包括一个(只能一个)ListView,而且要设置ListView对象的id为"@android:id/list";在Java代码里使用android.R.id.list。

下面的例子,如果当ListView中没有值而又想提示一句话时,那么用于指定显示提示信息的TextView的 id 必须为 "@android:id/empty",提示的信息可以通过android:text进行指定,当ListView里面没有data的时候,就会显示"Nodata"。

自定义的View(listview.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">

        <ListView android:id="@id/android:list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
        />

        <TextView android:id="@id/android:empty"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="No data"
                android:textColor="#ff0000"
        />
</LinearLayout>

加载Layout:

@Override
public void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);

        //没有设置data source
}

 

官方提供了多种ListItem的Layout(R.layout),以下是较为常用的:

§ android.R.layout.simple_list_item_1  一行text

§ android.R.layout.simple_list_item_2  一行title,一行text

§ android.R.layout.simple_list_item_single_choice  单选按钮

§ android.R.layout.simple_list_item_multiple_choice  多选按钮

§ android.R.layout.simple_list_item_checked   checkbox

我们可以自定义自己的Layout(list_item.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <ImageView android:id="@+id/icon"
                android:layout_width="48dip"
                android:layout_height="48dip" />

        <TextView android:id="@+id/text"
                android:layout_gravity="center_vertical"
                android:layout_width="0dip"
                android:layout_weight="1"
                android:layout_height="wrap_content" />

</LinearLayout>

使用时,以R.layout.list_item引用就行了。

 

通过调用SetListAdapter(ListAdapteradapter)就可实现数据的绑定。我们可以implements ListAdapter来自定义自己的数据源。 API内置了几个已经implements ListAdapter的Adapter:BaseAdapter,SimpleAdapter (以Map的形式存储静态数据),SimpleCursorAdapter (用于游标查询的结果)等等。通常我们更多地extends BaseAdapter来编写自己的Adapter类,因为BaseAdapter类是其他Apdater类的基类。扩展BaseAdapter类一般都需要重写以下方法:

int    getCount()           获取当前Adapter的Items数目

Object    getItem(intposition)     获取相应position的Item

long   getItemId(int position)   获取相应position的Item在List中的rowid

View   getView(int position, View convertView, ViewGroupparent) 获取在指定position所要显示的data的View

详细内容可以查看BaseAdapter类的继承android.widget.Adapter的方法,有时也需要重写ListAdapter的boolean    isEnabled(int position)来实现某些效果。

不同Adapter绑定数据的例子:

1. 使用ArrayAdapter

 

public void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);

        //参考ArrayAdapter的构造函数
        setListAdapter(new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1,
                        mStrings));

        //在ListView上输入字母,就会自动筛选出以此内容开头的Item
        getListView().setTextFilterEnabled(true);
}

private String[] mStrings ={"A", "Android", "机器人", "Google"};

说明: ArrayAdapter  说明: ArrayAdapter

 

2. 使用SimpleCursorAdapter

  通过读取通讯录android.provider.Contacts.Phones的资料,显示出来。

 

protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get a cursor with all phones
        Cursorc =getContentResolver().query(Phones.CONTENT_URI, null, null, null, null);
        startManagingCursor(c);
        
        // Map Cursor columns to views defined insimple_list_item_2.xml
        ListAdapteradapter = new SimpleCursorAdapter(this,
                        android.R.layout.simple_list_item_2,c, 
                                        new String[] { Phones.NAME,Phones.NUMBER }, 
                                        new int[] { android.R.id.text1, android.R.id.text2});
        setListAdapter(adapter);
}

 

3. ListItem为单选按钮

 

public void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);

        //参考ArrayAdapter的构造函数
        setListAdapter(new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_single_choice,
                        mStrings));

        final ListView listView =getListView();
        listView.setItemsCanFocus(false);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); //设置单选模式
}

private String[] mStrings ={"A", "Android", "机器人", "Google"};

Android关于ListView的总结--使用ListActivity 说明: singliechoice

 

4. 使用SimpleAdapter

  SimpleAdapter将一个List做为数据源,可以让ListView进行更加个性化的显示。而List中的第一项是个Map<String,?>(用到泛型),其中Map中的每项将与ListView中的每项进行一一对应绑定。Ok,看一下构造:
  SimpleAdapter(Contextcontext,List<? ExtendsMap<String,?>>data,int resource,String [] form, int []to);
Context:当前上下文,一般把Activity.this传递进行。
Data: 数据源。
Resource: 自定义的layout模板资源,可以用 R.layout.xxx获取引用。
Form: 定义ListView中的每一项数据索引,索引来自于Map<String,?>,即指定要显示的内容。
To:View数组,在ListView模板中的定义View,与Form中需要一一对应。

public void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);

             List<Hashtable<String,Object>> listContent=newArrayList<Hashtable<String,Object>>();
     for (int i = 0; i < deviceList.size();i++)
      {
       Hashtable<String,Object> table = new Hashtable<String,Object>();
         table.put("name",deviceList.get(i).Name);
       table.put("address",deviceList.get(i).Address);
           table.put("type", deviceList.get(i).Type + ""); 
       listContent.add(table);
      }
     adapter =new SimpleAdapter(HeartActivity.this,listContent,R.layout.child,new String[] { "name","address" }, new int[] {R.id.txtDeviceName,R.id.txtDeviceAddress });
    setListAdapter(adapter);
}

 

5. ListItem为多选按钮

把例子3的设置改为android.R.layout.simple_list_item_multiple_choice以及选择模式ListView.CHOICE_MODE_MULTIPLE。

更多的例子可以参考官方的Sample,在此列出相关List的示例说明:

List1 - 使用ArrayAdapter并setTextFilterEnabled(true)

List2 - 使用SimpleCursorAdapter读取通讯录People.NAME

List3 - 使用SimpleCursorAdapter读取通讯录Phones,两行显示Item

List4 - 使用自定义Adapter以及自定义ItemView

List5 - 带有separator的ListView,通过自定义Adapter,重写boolean isEnabled(int position)

List6 - 使用自定义Adapter以及自定义ItemView,可伸展隐藏内容

List7 - 使用SimpleCursorAdapter读取数据

List8 - 展现使用setEmptyView效果

List9 - 涉及OnScrollListener

List10 - ListItem为单选按钮

List11 - ListItem为多选按钮

List12 - 可以动态添加ListItem

List13 - 如何加快操作显示,during scrolls orflings的时候

List14 - 如何编写高效的ListAdapter

其中List14,官方告诉我们:

To work efficiently the adapter implemented hereuses two techniques:

 * - It reuses the convertViewpassed to getView() to avoid inflating View when it is notnecessary

 * - It uses the ViewHolderpattern to avoid calling findViewById() when it is notnecessary

还告诉了我们ViewHolder类的作用:

 * The ViewHolder patternconsists in storing a data structure in the tag of the viewreturned by

 * getView(). This datastructures contains references to the views we want to bind datato, thus

 * avoiding calls tofindViewById() every time getView() is invoked.

另外在以上的例子里面了解到,使用自定义Adapter,当数据发生变化后需要调用notifyDataSetChanged()来刷新ListView,但在List12的例子,使用ArrayAdapter却没有调用这方法,而随后自己写代码,在发生的异常里面了解到BaseAdapter,ArrayAdapter是会调用自己的notifyDataSetChanged()。

   ListView中的条目短按和长按事件,他们的处理方式是不同的。对于短按事件,处理起来比较简单,我们只需要覆盖ListActivity的onListItemClick()方法,如下所示:

   protected void onListItemClick(ListView arg0, Viewarg1, int arg2, long arg3) {
                         CharSequence s =((TextView)arg1).getText();
                        Log.e("CallLogActivity",s+ " isclicked");
                       super.onListItemClick(arg0, arg1,arg2, arg3); 

 }
      对于长按事件,我们需要给listview注册一个OnItemLongClickListener,并实现Listener中定义的方法,如下所示:
getListView().setOnItemLongClickListener(new OnItemLongCLickListener(){
                   public booleanonItemLongClick(AdapterView parent, View view, intposition,long id) {
                               Log.e("CallLogActivity",view.toString() + "position=" + position);
                              CharSequence number =((TextView) view).getText();
                              Toast.makeText(this, number + "is long clicked",Toast.LENGTH_LONG).show();
                               return true;   }     

});


转:http://blog.sina.com.cn/s/blog_62f28d560100uc5i.html


老版QQ原生表情gif动态 这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。 立即下载

相关推荐

LAMMPS模拟新合金没势函数?手把手教你用`pair_style hybrid`混合势函数(附FeCMnSiTi案例)

本文详细介绍了在LAMMPS中如何使用`pair_style hybrid`混合势函数模拟新型高熵合金(如FeCMnSiTi),解决缺乏现成势函数的问题。通过实战案例,涵盖参数查找、命令编写、错误排查等关键步骤,特别适合处理多组元体系的复杂相互作用。文章还提供了EAM势函数与LJ势的组合技巧,帮助研究者准确模拟合金性能。

weixin_30635053的博客 244

Android ListAdapter的高级功能

昨天某同学要转行做android,我问他ListView的Adapter用哪个,他说用SimpleAdapter。如果对Adapter的认识只停留在SimpleAdapter不是很够力啊。在学习android的时候大体都经历了SimpleAdapter-&gt;BaseAdapter的过程。对于一般应用,到BaseAdapter也就够了。BaseAdapter是ListAdapter的子...

移动开发记录 250

红外气体检测方案解析:从NDIR原理到物联网终端设计实践

气体检测是工业安全与环境监测的核心需求,其技术原理主要基于气体分子对特定物理或化学信号的响应。非色散红外(NDIR)技术作为一种物理检测方法,通过测量气体分子对特定波长红外光的吸收来定量浓度,因其不依赖化学反应,具备寿命长、抗干扰强和响应快等优势。在工程实践中,红外气体检测方案的价值在于为物联网终端设备提供了高可靠、低功耗的感知能力,广泛应用于工业过程监控、环境空气质量监测以及智能家居安全预警等场景。本文以一套集成了Microchip MCU、Axetris红外光源和Pyreos热释电传感器的参考设计为例,

weixin_30954817的博客 394

ListAdapter封装, 告别Adapter代码 (二)

Android ListAdapter 封装; BaseItem, DiffCallback, MVVMHolder, Hanlder事件响应, BaseAdapter, SimpleAdapter封装.

孟老板的博客 822

PYNQ-Z2 开发板从镜像烧录到 Jupyter 交互全流程指南

本文详细介绍了PYNQ-Z2开发板从镜像烧录到Jupyter交互的全流程指南,包括硬件解析、镜像烧录技巧、设备启动与网络配置、Jupyter Notebook深度使用以及实战案例分享。通过具体步骤和实用技巧,帮助开发者快速上手PYNQ-Z2开发板,实现高效的FPGA开发和智能家居控制应用。

weixin_28736355的博客 440

Canoe主要功能的详细介绍

CANoe是德国Vetor公司推出的一款用于总线开发的设备,全程为CAN open environment。后来随着总线技术的发展,CANoe不仅限于CAN类型的总线开发,还包含LIN、FlexRay、MOST和以太网等开发。在车载网络和ECU开发、测试和分析方面,CANoe几乎长期占据着垄断地位,当然是因为其强大的功能性了。目前用这个工具的主要是整车厂和供应商的网络设计工程是、开发工程师和测试工程师。小编当时安装CANoe的时候也是花了一定的时间和精力,好在没有崩溃。

车载测试 3723

Android ListView默认选中第一项或第N项

大体上从查阅的资料和自己的实践一共可以分为以下几种方法: 一:重写Adapter 在getView里进行自己的操作(选中,变色等等) 二:利用onWindowFocusChanged和一个全局变量来控制

Lizard的博客 5197

Kubernetes集群资源优化实战:Volcano调度器如何帮你省下30%GPU算力

本文详细介绍了如何通过Volcano调度器的Binpack策略优化Kubernetes集群中的GPU资源利用率,解决AI模型训练中的资源碎片化问题。通过实战配置和调优指南,帮助用户提升30%的GPU算力利用率,显著降低任务等待时间和硬件成本。

weixin_30832143的博客 507

Android BLE开发之Android手机与BLE终端通信

最近穿戴设备发展得很火,把相关技术也带旺了,其中一项是BLE(Bluetooth Low Energy)。BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。Android 4.3才开始支持BLE API,所以请各位客官把本文代码运行在蓝牙4.0和Android 4.3及其以上的系统,另外本文所用的BLE终端是一个蓝牙4.0的串口蓝牙模块。

hellogv的专栏 15万+

奇迹MU单机版开服全流程:从零搭建到分辨率调整(附GM工具使用技巧)

本文详细介绍了奇迹MU单机版从零搭建到分辨率调整的完整流程,包括环境配置、服务端启动、GM工具使用技巧等关键步骤。特别针对现代高分辨率显示器提供了优化方案,帮助玩家轻松搭建个性化游戏环境,重温经典MMORPG的独特魅力。

b3n4m5q6w7的博客 680

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 791

自定义控件三部曲之动画篇(十三)——实现ListView Item进入动画

前言:宝剑锋从磨砺出,梅花香自苦寒来 相关文章: 《Android自定义控件三部曲文章索引》:http://blog.youkuaiyun.com/harvic880925/article/details/50995268 前面两篇我们讲解了使用layoutAnimation和LayoutTransition实现ViewGroup中Item加载动画的方法,但他们都各自存在问题: layoutAn...

启舰 1万+

NOC总线架构拓扑介绍

在开篇里,我们对芯片PPA有了初步的认识。下面,让我们从访存这个简单的问题开始展开介绍芯片基础概念。CPU是怎样访问内存的?简单的答案是,CPU执行一条访存指令,把读写请求发往内存管理单元。内存管理单元进行虚实转换,把命令发往总线。总线把命令传递给内存控制器,内存控制器再次翻译地址,对相应内存颗粒进行存取。之后,读取的数据或者写入确认按照原路返回。再复杂些,当中插入多级缓存,在每一层缓存都未命中的情况下,访问才会最终达到内存颗粒。

元直的博客 5296

Android中Activity中使用ListView与ListActivity中使用ListView的区别与联系

Android中Activity与ListActivity使用ListView的区别与联系:1. Activity的使用: (1).概念: 每一个activity对应于一个显示界面,每一个activity都是独占整个屏幕的. (2).步骤: A:xml布局中,ListView标签id可以任意取值如:<ListView an

Android技术专栏 2378

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android ListView布局之一(继承listActivity、使用arrayAdapter)

<br />使用ListView和arrayAdapter布局,是ListView布局中最为简单的一种,首先我们会建立一个组件用来显示数据,例如main.xml<br /><?xml version="1.0" encoding="utf-8"?> <!-- 主界面本身就是一个显示组件 --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_paren

梦中一夜下江南 8179

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 继承listview,Android listView 继承ListActivity的用法

Android listView 继承ListActivity的用法 在手机中经常有列表方式。如果Activity中只有唯⼀⼀个List(这也是通常的情况),可以继承ListActivity来实现。我们用两个例子来学习List。List例子⼀:利用Android自带的List格式步骤⼀:Android XML文件ListActivity是⼀个全屏的list,如果我们需要定制layout,例如加上⼀...

weixin_35189483的博客 432

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android中Activity中与ListActivity中使用listview区别

Activity中使用Listview步骤: 1.xml布局中,ListView标签id可以任意取值 2.程序中通过findViewById获取该Listview对象 3.实例化Adapter 4.然后通过listView.setAdapter(adapter);  设置adapter绑定数据 ListActivity中使用Listview步骤: 1.xml布局中,

Whisker_yu的专栏 642

安卓开发之基于ListActivity的LIstView的用法

安卓开发中ListView是最常用的,也是最重要的用法之一,作为一个刚刚步入安卓开发之旅的初学者,ListView的熟练运用是必备技能之一。下面是个人学习过程中的一个实例。 package com.example.admin.listviewmodel; import android.app.ListActivity; import android.os.Bundle; //继承ListAc

以码为梦 628

Android之ListActivity的使用和在ListView中添加图片文字

Android之ListActivity的使用和在ListView中添加图片文字

kkfdsa132的专栏 1万+

Android之 ListActivity 的使用和在 ListView中添加图片文字

ListActivity简单的说就是ListView和Activity的结合,跟ListView和Activity组合实现的没有什么很大的差别,主要是比较方便。但在实现时,有几点要注意。             1、ListActivity可以不用setContentView(R.layout.main),它默认是LIstView占满屏。             2、如果想在屏幕中显示其他控件

我的微博上有你 598

android ListActivity或listview相互数据传递的实现方法

需要实现ListActivity双向数据传递,在网上查了一下资料,发现网上的总结大部分都是讲述的单向数据的传送,所以将我的方法贴出来仅供参考。 先做一个十分简单的界面 代码如下:package com.example.maintest; import android.app.Activity; import android.content.Intent; import and

yxg190221的专栏 1903

android权限列别,列表ListView和ListActivity以及使用SimpleAdapter

创建listview有2种方式1>直接使用ListView进行创建2>让Activity继承ListActivity下面是listview常用的一些属性案例:public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreat...

weixin_33750664的博客 381

Android ListView ListActivity PreferenceActivity背景变黑的问题

ListView在滚动时背景会变暗甚至变黑,这个要从Listview的效果说起,默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动 的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用

fulianwu的专栏 1329

Android ListView and ListActivity Tutorial

http://www.vogella.de/articles/AndroidListView/article.html

Andrew's Blog 669

Android之ListView的用法(ListActivity)——系列(7)

转载:http://skyfengfu.diandian.com/post/2012-10-09/40039413744 ListView是安卓部分中,很常用的一个控件,也是很灵活的一个空间,在软件的很多常用布局中都会用到,所以要熟练运用。 一、初级(简单的现实一个列,并对其点击事件做处理) 效果如下: 点击处理只是一个简单的吐司提示: 这

zhangxinrun的专栏 4870
上一篇: Android onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
下一篇: Android 开发学习中 各种问题收集
wx1qq1com
博客等级 码龄18年 123粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值