一、ListActivity :  如何你的Activity仅涉及到一个列表(ListVIew),那么你就该考虑使用ListActivity这个类

  注意事项:1.ListActivity 里面默认包含显示的ListView视图

       2.想自定义布局且显示出来,必须把ID设置为 android:id = “@id/list”

否则系统会报出这样的错误: Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

public class TextActivity extends ListActivity {
private String[] objs = {"北京", "上海", "天津"};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(TextActivity.this,
R.layout.listview1, R.id.line3, objs);
setListAdapter(adapter);
}
}
activity_main.xml文件内容显示
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/line1" ---------------->致命的错误,它的ID必须为list才能编译过
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</LinearLayout> 二、ListView的点击事件  1.onItemClickListener : 当有一个item被点击触发的时候,它的回调函数是onItemClick()
  2.在ListActivity中使用item点击事件时候,需要重写onItemListener()这个函数
  3.读取xml文件中的数据方式:  
    couse.xml文件
    <resources>
    <string-array name="course">
  <item> 嵌入式</item>
  <item> C语言</item>
  <item> Java</item>
  <item> Android</item>
    </string-array>
    </resources>

   private String [] objs;
   objs = MainActivity.this.getResources().getStringArray(R.array.course);

  4.SimpleAdapter的创建数据源的方法   

    List<Map<String , Object> >dataSource1= new ArrayList<Map<String ,Object>>();   //这个比较使用起来好一些

   List<Map<String , String>> dataSource1= new ArrayList<Map<String, String>>();

    Map<String , Object> map = new HashMap<String , Object>();    //这个比较使用起来好一些

    Map<String, String> map = new HashMap<String, String>();       //new出数据源的对象

map.put("name" , "小明");

map.put("age" , "23");

      dataSource1.add(map);           //new ArrayList<Map<String, String>>();

                                      //不执行会报出on a null object reference 会爆出空引用的错误

   5.adpater.notifyDataSetChangge()  :  可以重新调用listView.setAdapetr来刷新数据 , 更新数据一定要有mlist.add()的方法才可以刷新数据

  三、继承BaseAdapter的重写的方法

    1.getCount :  得到数据的个数

    2.getItem  :  得到项目

    3.getItemID : 的到项目的ID

    4.getView   : 得到视图View

  四、ListView的优化性能

    1.不使用listView.addView来添加视图,这个机制是由adapter来实现的

      (1).优化view的方法

      view重复利用的话,可以减少创建view的次数,从而来减少cpu的消耗

       

  public View getView(int position, View convertView, ViewGroup parent) {
   View view = convertView;
    //防止解析布局多次重复解析来浪费cpu
  if(convertView == null)
   view = getLayoutInflater().inflate(R.layout.listexercise, parent, false);
    
  (2).优化控件
    减少多次查找findViewById次数来达到优化:       

    

    //创建持有者HoldView的方法

     

    

  
public   View getView(int position, View convertView, ViewGroup parent)
{
  ViewHolder viewHolder = null;
  if (null == convertView)
  {
   viewHolder = new ViewHolder();
  LayoutInflater mInflater = LayoutInflater.from(mContext);
  convertView = mInflater.inflate(R.layout.item_marker_item, null);   viewHolder.name = (TextView) convertView.findViewById(R.id.name);
  viewHolder.description = (TextView) convertView
.findViewById(R.id.description);
  viewHolder.createTime = (TextView) convertView
.findViewById(R.id.createTime);   convertView.setTag(viewHolder); //setTag还需要深入学习
  }
  else
  {
  viewHolder = (ViewHolder) convertView.getTag();
  }
     private static class ViewHolder
  {
  TextView name;
  TextView description;
  TextView createTime;
  } 五、关于view的setTag有一个坑来注意一下

converView.setTag("pic",picHolder);

converView.getTag("pic");

项目会Crash,开始抛出IllegalArgumentException的问题了

解决办法:

那么我们要怎么实现唯一的key呢?其实我们可以把key定义在资源文件中,再由编译器生成对应的,唯一的id!因此我们可以这样写在项目的资源res/values/string.xml中:

converView.setTag(R.id.tag_text,picHolder);

converView.getTag(R.id.tag_text);




    

 

  

Android------------------ListVIew学习的更多相关文章

  1. [Android]ListView学习笔记

    基本用法流程 创建Adapter并且派生自BaseAdapter,实现其必要的接口方法 将创建的Adapter分配给ListView对象:mPhoneBookListView.setAdapter(p ...

  2. Android UI学习 - ListView (android.R.layout.simple_list_item_1是个什么东西)

    Android UI学习 - ListView -- :: 标签:Android UI 移动开发 ListView ListActivity 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...

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

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

  4. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...

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

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

  6. Android -- ListView与ArrayAdapter、SimpleAdapter

    对于ArrayAdapter,里面虽然能添加图片,但只能是相同的图片. 废话不多说: 布局&&list的item布局                                   ...

  7. Android -- ListView与Adapter

    ListView在Android中有着很重要的作用.Android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示. 背景              ...

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

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

  9. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  10. Android ListView异步载入图片乱序问题,原因分析及解决方式

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android全部系统自带的控件其中,ListView这个控件算是 ...

随机推荐

  1. Message: u'The given selector btn dropdown-toggle btn-info is either invalid or does not result in a WebElement

    html代码: <html> <head> <meta http-equiv="content-type" content="text/ht ...

  2. dede自定义标签

    在dede安装目录下的include/taglib下创建标签文件,比如mytest.lib.php.(必须以.lib.php为后缀) <?php if(!defined('DEDEINC')) ...

  3. vim之quickfix

    [vim之quickfix] quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极 ...

  4. code4906 删数问题

    题目: 键盘输入一个高精度的正整数n(<=240位), 去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数. 编程对给定的n和s,寻找一种方案,使得剩下的数最小. Simple Inp ...

  5. 【附源文件】日记类App原型制作分享-Grid Diary

    Grid Diary是一款非常受文艺青年喜爱的记录应用,它设计简单,内容却非常丰富.它不再是单调的文字记录,界面的设计非常与众不同,由许多格子拼凑而成,每一个格子里面还带有一个问题,十分有趣.提到格子 ...

  6. hive 报错 java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

    Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable ...

  7. C++11新特性——The C++ standard library, 2nd Edition 笔记(一)

    前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...

  8. a标签的四个伪类

    A标签的css样式   CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link    :v ...

  9. 2018.10.22 bzoj4380: [POI2015]Myjnie(区间dp)

    传送门 区间dp好题. f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]最小值为kkk时的最大贡献. 然后可以枚举端点转移. 当时口胡到这儿就不会了. ...

  10. POJ 1061 青蛙的约会(扩展欧几里德算法)

    题意:两只青蛙在同一个纬度上跳跃,给定每个青蛙的开始坐标和每秒跳几个单位,纬度长为L,求它们相遇的最短时间. 析:开始,一看只有一组数据,就想模拟一下,觉得应该不会超时,但是不幸的是TLE了,我知道这 ...