这里再学习写android的ListView,其实我们都使用过ListView,就像手机的联系人,就是用的ListView了。下面就实现下简单的ListView吧,首先是xml文件中添加相关的代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" >
  6.  
  7. <ListView
  8. android:id="@+id/list_view"
  9. android:layout_height="match_parent"
  10. android:layout_width="match_parent" />
  11.  
  12. </LinearLayout>

然后在MainActivity代码中实现如下:

  1. package com.example.jared.uilistview;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.ActionBar;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.widget.ArrayAdapter;
  7. import android.widget.ListView;
  8.  
  9. public class MainActivity extends AppCompatActivity {
  10.  
  11. private String[] data = {"苹果", "香蕉", "梨子", "西瓜", "蓝莓", "葡萄", "橘子",
  12. "甘蔗", "火龙果", "柚子", "荔枝", "猕猴桃"};
  13. private ListView listView;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. ActionBar actionBar = getSupportActionBar();
  18. actionBar.hide();
  19.  
  20. setContentView(R.layout.activity_main);
  21.  
  22. ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  23. MainActivity.this, android.R.layout.simple_list_item_1, data);
  24. listView = (ListView)findViewById(R.id.list_view);
  25. listView.setAdapter(adapter);
  26. }
  27. }

这里定义了ArrayAdapter适配器,用来适配ListView,可以泛型编程,这里只用String,所以用这个倒是挺合适。

运行代码如下:

这里实现的最简单就是文字,下面在添加图片试试。

首先新建fruit类,代码如下:

  1. package com.example.jared.uilistview;
  2.  
  3. /**
  4. * Created by jared on 16/2/9.
  5. */
  6. public class Fruit {
  7. private String name;
  8. private int imageId;
  9.  
  10. public Fruit (String name, int imageId) {
  11. this.name = name;
  12. this.imageId = imageId;
  13. }
  14.  
  15. public String getName() {
  16. return name;
  17. }
  18.  
  19. public int getImageId() {
  20. return imageId;
  21. }
  22. }

Fruit类主要是提供一个名字和一张图片,所以提供了获取名字和imageid的接口。

接着新建一个fruit.xml用来提供imageview和textview,当然还可以扩展,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5.  
  6. <ImageView
  7. android:id="@+id/fruit_image"
  8. android:layout_height="wrap_content"
  9. android:layout_width="wrap_content"/>
  10.  
  11. <TextView
  12. android:id="@+id/fruit_name"
  13. android:layout_height="wrap_content"
  14. android:layout_width="wrap_content"
  15. android:layout_gravity="center"
  16. android:layout_marginLeft="10dip"/>
  17.  
  18. </LinearLayout>

创建自定义适配器FruitAdapter,代码如下:

  1. package com.example.jared.uilistview;
  2.  
  3. import android.content.Context;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.ArrayAdapter;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10.  
  11. import java.util.List;
  12.  
  13. /**
  14. * Created by jared on 16/2/9.
  15. */
  16. public class FruitAdapter extends ArrayAdapter<Fruit> {
  17. private int resourceId;
  18.  
  19. public FruitAdapter (Context context, int textViewResourceId,
  20. List<Fruit> objects) {
  21. super(context, textViewResourceId, objects);
  22. resourceId = textViewResourceId;
  23. }
  24.  
  25. public View getView(int position, View convertView, ViewGroup parent) {
  26. Fruit fruit = getItem(position);
  27. View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
  28. ImageView fruitImage = (ImageView)view.findViewById(R.id.fruit_image);
  29. TextView fruitName = (TextView)view.findViewById(R.id.fruit_name);
  30. fruitImage.setImageResource(fruit.getImageId());
  31. fruitName.setText(fruit.getName());
  32. return view;
  33. }
  34. }

最后修改MainActivity代码,如下所示:

  1. package com.example.jared.uilistview;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.ActionBar;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.widget.ListView;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. public class MainActivity extends AppCompatActivity {
  12.  
  13. private List<Fruit> fruitList = new ArrayList<Fruit>();
  14. private ListView listView;
  15.  
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. ActionBar actionBar = getSupportActionBar();
  20. actionBar.hide();
  21.  
  22. setContentView(R.layout.activity_main);
  23. initFruits();
  24. FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit, fruitList);
  25.  
  26. listView = (ListView)findViewById(R.id.list_view);
  27. listView.setAdapter(adapter);
  28. }
  29.  
  30. private void initFruits() {
  31. Fruit apple = new Fruit("苹果", R.drawable.apple);
  32. fruitList.add(apple);
  33. Fruit banana = new Fruit("香蕉", R.drawable.banana);
  34. fruitList.add(banana);
  35. Fruit pear = new Fruit("梨子", R.drawable.pear);
  36. fruitList.add(pear);
  37. Fruit watermelon = new Fruit("西瓜", R.drawable.watermelon);
  38. fruitList.add(watermelon);
  39. Fruit grape = new Fruit("葡萄", R.drawable.grape);
  40. fruitList.add(grape);
  41. Fruit orange = new Fruit("橙子", R.drawable.orange);
  42. fruitList.add(orange);
  43. Fruit litchi = new Fruit("荔枝", R.drawable.litchi);
  44. fruitList.add(litchi);
  45. Fruit strawberry = new Fruit("草莓", R.drawable.strawberry);
  46. fruitList.add(strawberry);
  47. Fruit pineapple = new Fruit("菠萝", R.drawable.pineapple);
  48. fruitList.add(pineapple);
  49. }
  50. }

运行看效果如下:

图片和文字都显示着了,那么怎么实现点击的效果呢?那下面就来学习下了。

首先是在MainActivity中添加代码如下:

  1. package com.example.jared.uilistview;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.ActionBar;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.ListView;
  9. import android.widget.Toast;
  10.  
  11. import java.util.ArrayList;
  12. import java.util.List;
  13.  
  14. public class MainActivity extends AppCompatActivity {
  15.  
  16. private List<Fruit> fruitList = new ArrayList<Fruit>();
  17. private ListView listView;
  18.  
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. ActionBar actionBar = getSupportActionBar();
  23. actionBar.hide();
  24.  
  25. setContentView(R.layout.activity_main);
  26. initFruits();
  27. FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit, fruitList);
  28.  
  29. listView = (ListView)findViewById(R.id.list_view);
  30. listView.setAdapter(adapter);
  31. listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  32. @Override
  33. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  34. Fruit fruit = fruitList.get(i);
  35. Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();
  36. }
  37. });
  38. }
  39.  
  40. private void initFruits() {
  41. Fruit apple = new Fruit("苹果", R.drawable.apple);
  42. fruitList.add(apple);
  43. Fruit banana = new Fruit("香蕉", R.drawable.banana);
  44. fruitList.add(banana);
  45. Fruit pear = new Fruit("梨子", R.drawable.pear);
  46. fruitList.add(pear);
  47. Fruit watermelon = new Fruit("西瓜", R.drawable.watermelon);
  48. fruitList.add(watermelon);
  49. Fruit grape = new Fruit("葡萄", R.drawable.grape);
  50. fruitList.add(grape);
  51. Fruit orange = new Fruit("橙子", R.drawable.orange);
  52. fruitList.add(orange);
  53. Fruit litchi = new Fruit("荔枝", R.drawable.litchi);
  54. fruitList.add(litchi);
  55. Fruit strawberry = new Fruit("草莓", R.drawable.strawberry);
  56. fruitList.add(strawberry);
  57. Fruit pineapple = new Fruit("菠萝", R.drawable.pineapple);
  58. fruitList.add(pineapple);
  59. }
  60. }

这里添加了setOnItemClickListener方法,然后就类似于Button一样的。运行看下效果,如下:

ViewList基本上就学习这些知识了。

附:参考《第一行代码》

Android开发学习之路--UI之ListView的更多相关文章

  1. Android开发学习之路--UI之简单聊天界面

    学了很多的ui的知识,这里就来实现个聊天的界面,首先来实现个layout的xml,代码如下: <?xml version="1.0" encoding="utf-8 ...

  2. Android开发学习之路--UI之自定义布局和控件

    新的一年已经开始了,今天已经是初二了,两天没有学习了,还是要来继续学习下.一般手机的title都是actionbar,就像iphone一样可以后退,可以编辑.这里自定义布局就来实现下这个功能,首先准备 ...

  3. Android开发学习之路--UI之基本布局

    上一篇文章中主要介绍了ui的控件,这里就学习下布局吧.android的基本布局在layout下主要如图: 从上图可以看出有FrameLayout(单帧布局),LinearLayout(线性布局),Ta ...

  4. Android开发学习之路--UI之初体验

    之前都是学习Activity,对于布局都没有做过学习,这里就简单学习下吧.下面看下Android Studio下有哪些控件: 这里分为Widgets,Text Fields,Containers,Da ...

  5. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  6. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  7. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  8. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  9. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

随机推荐

  1. Java 实现32位MD5加密

    MD5介绍[链接] Java代码实现 public class Md5Util { private String Md5Util(String s) { try { MessageDigest md ...

  2. 自定义shell终端提示符及颜色即修改 PS1文件 (以Centos为例)

    Linux修改Shell命令提示符及颜色 1. Linux登录过程中加载配置文件顺序: /etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~ ...

  3. JAVA虚拟机:对象的创建过程

    简要说明的话,Java对象的创建过程分为下面几步: 1.执行相关检查: 2.为对象分配内存,将分配到的内存空间都初始化为零值: 3.进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤: 1.执行 ...

  4. Mysql--七种 Join 查询

    Mysql 系列文章主页 =============== 1 准备数据 1.1 建立 Employee 表 DROP TABLE IF EXISTS employee; CREATE TABLE IF ...

  5. spring cloud 入门系列二:使用Eureka 进行服务治理

    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分 ...

  6. salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

    在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresi ...

  7. ng-book札记——Angular工作方式

    Angular应用由组件(Component)构成.它与AngularJS中的指令相似(directive). 应用 一个Angular应用本质上是一个组件树.在组件树的顶层,最上级的组件即是应用本身 ...

  8. Bootstrap3 概述

    注意:HTML5 文档类型 Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型.在你项目中的每个页面都要参照下面的格式进行设置. <!DOCT ...

  9. Mac OS: How to keep network connection alive after sleep

    Do the following: Find out what the network interface is for your wifi. Mine is "en1" for ...

  10. RAP在线接口管理统计部署

    文档: https://github.com/thx/RAP/wiki/home_cn centos上部署 参考:https://github.com/thx/RAP/wiki/deploy_on_c ...