这个打字有点慢了,左手受伤了,不过很幸运,左手小拇指没事(这就可以愉快地使用快捷键啦!),虽然有伤,但还是得坚持总结,不只是为自己,还为未来的你们铺路,希望我写的,对你们有帮助。

  提前给自己一个祝福:祝自己以后的路上总结的经验,希望这些经验都能被用到,祝自己再长高4厘米。

  回归正题:

  今天我们介绍ListView

  ListView绝对可以称得上是 Android中常用的控件之一,几乎所有的应用程序都会用到它。 由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量 的数据需要展示的时候,就可以借助 ListView来实现。ListView允许用户通过手指上下滑动的方 式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。相信你其实每天都在 使用这个控件,比如查看 QQ聊天记录,翻阅微博新消息,等等。

  可以看出物尽其职吧,能力有多大,责任就有多大,哈哈。

   这边先上布局,就直接在布局中搞个ListView控件。

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
然后就有点像封装类了;
创建一个类,就像写封装一样,我这边元素是两个,文本,图片;(提示一个Alt+intert快捷键,作用就是快捷创建get、set,就有点像eclipse里的Alt+s吧)
package com.example.listview;

public class Animal {
String name;
int ImageId; public Animal(String name, int imageId) {
this.name = name;
ImageId = imageId;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getImageId() {
return ImageId;
} public void setImageId(int imageId) {
ImageId = imageId;
}
}
封装的出口在构造器,我们这边就是先文本再图片,会不会很奇怪为啥图片是int,因为我们是传图片路径,就像控件id一样,有自己独特的整型编码。 这边我们是自定义适配器,适配器这个概念有点像一个通道,把后端数据和前端显示连接。
如果你们不理解可以去看看https://blog.csdn.net/leeziyuan/article/details/49717347
本牛崽不求那种大牛文,写的太深奥,我们小牛崽子连人家的专业术语怕是都不懂,而且大牛们写的都很深。
简单易懂,直入主题的,我觉得很好。
可以看出,这边是继承了它->BaseAdapter是一个抽象类,需要子类继承并实现其中的方法才能使用,常用于用户自定义适配器时,显示比较复杂的数据。

public class MyAdapter extends BaseAdapter {
List<Animal> list;
public MyAdapter(List<Animal> 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 0;
} @Override
public View getView(int position, View view, ViewGroup parent) {
if(view==null)
{
view= LayoutInflater.from(parent.getContext()).inflate(R.layout.pkchu_main,null);//布局填充
}
ImageView imageView=view.findViewById(R.id.image_p);
TextView textView=view.findViewById(R.id.text_p);
imageView.setImageResource(list.get(position).getImageId());
textView.setText(list.get(position).getName());
return view;
}
}
这些方法都是固定的,BaseAdapter接口里的抽象方法的实现而已,本牛崽主要介绍getView的内容,就是获取布局信息的,首先判断有没有视图存在
然后给视图实例化,实例化对象是在它的父类中,
在list中用getcontext()是ArrayAdapter里有这个方法的声明,
而MyAdapter中没有,所以用parent.getContext()在它的父类中声明。(本人理解,错了提出来,我来改)。 实例化的对象就是那个自定义的给每个列表用的布局
下面的就是连接这些布局中的图片控件和文本控件,
然后把图片路径放进去,实现各个列表图片不一样,position是下标位置,然后就是获取当前位置的图片路径。
文本也是一样。 给列表的布局如下:
<?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="wrap_content">
<ImageView
android:id="@+id/image_p"
android:src="@drawable/pika1"
android:layout_width="50dp"
android:layout_height="50dp"></ImageView> <TextView
android:id="@+id/text_p"
android:layout_width="271dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:hint="qwertyuiop"
android:layout_marginLeft="10dp"></TextView>
</LinearLayout> 最后用 自己写的适配器开始连接ListView(主活动中):
这边就可以添加列表了,列表对象是我们创建的那个封装类。
然后把我们自定义的适配器new出来,一个参数哈,因为那个类的构造器只有一个参数。 这两个监听器,一个是点击列表产生监听
一个是长按产生监听。注意的是都是列表的哈,不要写成布局的监听器了。
不懂就想象成QQ界面吧
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Animal> list = new ArrayList<Animal>();//数据
list.add(new Animal("龙*华",R.drawable.pika1));
list.add(new Animal("*龙",R.drawable.pika2));
list.add(new Animal("*钱",R.drawable.pika3));
list.add(new Animal("**华",R.drawable.pika4));
ListView listView =findViewById(R.id.listView1);
MyAdapter adapter=new MyAdapter(list);//实例化适配器
listView.setAdapter(adapter);//关联适配器
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "你点击了"+position, Toast.LENGTH_SHORT).show();
}
});//设置点击监听
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "你长按了"+position, Toast.LENGTH_SHORT).show();
return true;
}
});//设置长按监听
}

效果就是这样。

艰难的写完了,嘿嘿。加油努力。总有一天会翱翔于天地。


												

Android 的重要控件 ListView (听说是最难最常用的控件)的更多相关文章

  1. [Android Pro] android控件ListView顶部或者底部也显示分割线

    reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...

  2. Android列表控件ListView详解

    ListView绝对可以称得上是Android中最常用的控件之一,几乎所有应用程序都会用到它. 由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候 ...

  3. 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2

    1.0 由于书上内容,已经和实际编程的兼容性已经不太友好,重写了项目,用于进一步学习列表控件ListView. 2.0 新建项目ListViewTest,其中文件目录如下: 3.0 ActivityC ...

  4. 【Android】11.0 UI开发(二)——列表控件ListView的简单实现1

    ************************ 转载请注明出处:https://www.cnblogs.com/xiaofu007/p/10342462.html ***************** ...

  5. Android基础控件ListView基础操作

    1.简介 基于Android基础控件ListView和自定义BaseAdapter适配器情况下,对ListView的数据删除和添加操作: public boolean add(E e) {//添加数据 ...

  6. 对ListView的Item子控件监听并跳转页面

    public class MyAdapteforOwner extends BaseAdapter{ List<OwnerDevice>datas; private Context con ...

  7. Android学习——控件ListView的使用

    一.ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动.然后修改activity_main.xml中的代码,如下: <?xml ...

  8. 【风马一族_Android】第4章Android常用基本控件

    第4章Android常用基本控件 控件是Android用户界面中的一个个组成元素,在介绍它们之前,读者必须了解所有控件的父类View(视图),它好比一个盛放控件的容器. 4.1View类概述 对于一个 ...

  9. Android 关于在Activity中监听ListView

    Android 开发时,最常用的控件之一就是ListView了,而使用ListView的同时,必然需要对它设置监听器,常用的监听器有这么几个: 1. OnItemClickListener // 监听 ...

随机推荐

  1. day38 并发编程(理论)

    目录 一.操作系统发展史 二.多道技术 1 单核实现并发的效果 2 多道技术图解 3 多道技术重点 三.进程理论 1 必备知识点 2 进程调度 3 进程的三状态 4 两对重要概念 四.开启进程的两种方 ...

  2. 萌新计划 PartⅡ

    Part Ⅱ web 9-15 这一部分的题,主要是绕过过滤条件,进行命令执行 0x01 web 9 过滤条件: if(preg_match("/system|exec|highlight/ ...

  3. java 基本语法(四) 流程控制(一) 分支结构

    if(条件表达式){ 执行表达式} 结构二:二选一if(条件表达式){ 执行表达式1}else{ 执行表达式2} 结构三:n选一if(条件表达式){ 执行表达式1}else if(条件表达式){ 执行 ...

  4. 数据可视化之powerBI技巧(十九)DAX作图技巧:使用度量值动态分组和配色

    有了前两篇关于分组的铺垫,这篇文章就来学习一个分组的经典应用,图表的动态分组,并对分组动态配色. 假设有十几个产品,每个产品的销售额,是随着时间而变化的,想知道某个时间的每一个产品的销售额与平均销售额 ...

  5. 基于ConcurrentHashMap的本地缓存

    基于ConcurrentHashMap的本地缓存 在系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减少无 ...

  6. Spring用到了那些注解?

    一:@Autowired(按类型注入)1.1通过 @Autowired的使用来消除 set ,get方法.@Autowiredprivate Dao dao;这样就可以删除set ,get方法和spr ...

  7. vue : 在vuex里写一个数组首尾元素互换的方法

    不着急上代码,先想几个问题. vuex里怎么写方法? mutation里写vuex方法,组件中用commit调用. 数组首尾元素怎么互换? arr.splice(0, 0, arr[arr.lengt ...

  8. 用x种方式求第n项斐波那契数,99%的人只会第一种

    大家好啊,我们又见面了.听说有人想学数据结构与算法却不知道从何下手?那你就认真看完本篇文章,或许能从中找到方法与技巧.     本期我们就从斐波那契数列的几种解法入手,感受算法的强大与奥妙吧. 原文链 ...

  9. .net core https 双向验证

    文章来自:https://www.cnblogs.com/axzxs2001/p/10070562.html 关于https双向认证的知识可先行google,这时矸接代码. 为了双向认证,我们首先得准 ...

  10. 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语

    目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...