ListView以列表的形式展示数据内容。

布局文件如下所示,添加一个ListView。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.listviewtest.MainActivity"> <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView> </RelativeLayout>

ListView有很多行,每一行是一个item。新建xml文件,用于设置item的布局。

这里设置每个item包括一个Button和一个TextView。

listview_item.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="wrap_content"
android:orientation="horizontal" > <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/> <TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="18sp"/> </LinearLayout>

MainActivity.java


package com.example.listviewtest; import android.support.v7.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.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends AppCompatActivity {
private ListView mListView;
private Button btn;
public static String[] names = {"Android", "IPhone", "WindowsMobile", "Blackberry",
"WebOs", "Ubuntu", "Windows7", "Mac OS X"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.listView); MyBaseAdapter mAdapter = new MyBaseAdapter(); mListView.setAdapter(mAdapter);
// ListView的item被点击监听
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), names[position], Toast.LENGTH_SHORT).show();
}
});
} class MyBaseAdapter extends BaseAdapter {
// 获得item的个数
public int getCount() {
return names.length;
}
// 获取item的对象
public Object getItem(int position) {
return names[position];
}
// 获取item的id
public long getItemId(int position) {
return position;
}
// 得到item的view视图
public View getView(final int position, View convertView, ViewGroup parent) {
// 由于在不同的布局文件中,所以要通过inflate将listView_item.xml动态加载到activity_main.xml中。
View view = View.inflate(MainActivity.this, R.layout.listview_item, null);
TextView textView = (TextView) view.findViewById(R.id.textView);
textView.setText(names[position]); Button btn = (Button) view.findViewById(R.id.btn);
// 设置button没有焦点,否则点击listview会无效。
btn.setFocusable(false);
btn.setText(names[position]);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(), "btn " + names[position] + " pressed", Toast.LENGTH_SHORT).show();
}
}); return view;
}
}
}

首先实现了BaseAdapter的类,实现了里面的几个抽象方法。

在getView()函数中设置了item中的视图,这样才会在activity_main.xml中显示出来。在textView中添加显示,添加button的监听事件,并且设置为没有焦点,ListView才能够获得焦点。否则只有点击button有限,点击ListView没有效果。

在OnCreate()中为ListView添加BaseAdapter对象。并未ListView添加了setOnItemClickListener()监听事件。

显示效果,点击button

点击ListView

Adapter除了BaseAdapter,还有SimpleAdapter,ArrayAdapter。BaseAdapter使用范围广,SimpleAdapter适配Checkable,TextView,ImageView。ArrayAdapter只能适配TextView。

Tony Liu

2017-3-13, Shenzhen

Android ListView 笔记的更多相关文章

  1. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  2. Android ListView无法触发ItemClick事件

    Android ListView无法触发ItemClick事件 开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承Base ...

  3. android ListView的介绍和优化

    xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity&qu ...

  4. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  5. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

  6. Android ListView工作原理完全解析,带你从源码的角度彻底理解

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据   转载请注明出处:h ...

  7. 【转】Android开发笔记——圆角和边框们

    原文地址:http://blog.xianqu.org/2012/04/android-borders-and-radius-corners/ Android开发笔记——圆角和边框们 在做Androi ...

  8. Android ListView工作原理全然解析,带你从源代码的角度彻底理解

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android全部经常使用的原生控件其中.使用方法最复杂的应该就是 ...

  9. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

随机推荐

  1. kubernetes 二

    部署harbor Habor是由VMWare中国团队开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获 得了更加广泛的应用,这些新的企业级特性包括 ...

  2. spring 中 AOP 功能

    1 PointCut 由 ClassFilter 和 MethodMatcher 构成,通过 ClassFilter 定位到类上,通过 MethodMatcher 定位到方法. 2 Spring 支持 ...

  3. vim:折叠操作

    zo 打开当前折叠 zc 关闭当前折叠 zr 打开所有折叠 zm 关闭所有折叠

  4. MYSQL COST optimizer

    http://blog.chinaunix.net/uid-26896862-id-3326400.html https://www.slideshare.net/olavsa/mysql-optim ...

  5. angular学习笔记(十一)-表达式

    本篇只要介绍angular表达式: 在之前的例子中,我们多半是直接把数据作为angular标识符的值,但其实可以使用表达式来做更多的事情: 比如: {{number}} 也可以是: {{number+ ...

  6. cocos2d-x分别在Visual Studio和eclipse中设置启用Box2D

    cocos2d-x内嵌有chipmunk和Box2D两个物理库,默认启用的是chipmunk.如果想使用Box2D,可做如下设置.PS:本人所用的版本是cocos2d-x-2.2.5. 一.在Visu ...

  7. Mac OSX安装 GitLab 5.x

    1)安装mac 2) 创建git用户和git组 4) 安装XCode 5) 安装命令行组件 6) 安装 Home brew $ ruby -e "$(curl -fsSL https://r ...

  8. Rokid开发者社区skill之【历史上的今天】

    技能名称:历史上的今天 入口词:打开历史上的今天 语音交互:(有些是先写上) { "intents": [ { "intent": "PAUSE_HI ...

  9. style弹出带滚动条的虚拟窗口

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  10. python学习笔记(21)--新建html乱码(给每本漫画生成一个html)

    说明: 1. open("index.html","w",encoding="utf-8"),open的第三个参数可以设置编码格式. 2. ...