Android开发之ListView、GridView 详解及示例代码

ListView与GridView是Android开发中的常用控件,它们和Adapter配合使用能够实现很多界面效果。下面分别以实例说明ListView、GridView的用法。

       1.ListView的Android开发实例

ListView 是android开发中最常用的控件之一,一般构成列表包括三个元素,ListView:用来展示列表的视图、Adapter:数据与视图连接的桥梁、Data:具体的数据包括字符串 、图片或者控件。

适配器一般有以下几种类型:

ArrayAdapter:Android中最简单的一种适配器,专门用于列表控件。只显示一行数据。

SimpleAdapter:此适配器有最好的扩充性,可以自定义出各种效果。经常使用静态数据填充列表。

CursorAdapter:通过游标向列表提供数据。

ResourceCursorAdapter:这个适配器扩展了CursorAdapter,知道如何从资源创建视图。

SimpleCursorAdapter:这个适配器扩展了ResourceCursorAdapter,从游标中得列创建 TextView/ImageView视图。下面获取通讯录的示例:

XML/HTML代码

<?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"
  android:background="@drawable/bg"   

  >
  <ListView
  android:id="@+id/contacts_list"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  </ListView>
</LinearLayout>

Java代码

package net.csdn.blog.androidtoast;   

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;   

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;   

public class MainActivity extends Activity {   

   ListView   mListView;
   ArrayList<Map<String, String>> listData;   

  static final String NAME = "name";
  static final String NUMBER = "number";
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getContacts();
  }   

  /**
   * 获取联系人列表
   */
  private void getContacts() {
    mListView=(ListView) findViewById(R.id.contacts_list);
    listData = new ArrayList<Map<String, String>>();
    //获取数据库Cursor
    Cursor cur=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    startManagingCursor(cur);
    while (cur.moveToNext()) {
     Map<String, String> mp = new HashMap<String, String>();
     long id = cur.getLong(cur.getColumnIndex("_id"));
     Cursor pcur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
         null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + Long.toString(id), null, null);   

     // 处理多个号码的情况
     String phoneNumbers = "";
     while (pcur.moveToNext()) {
        String strPhoneNumber = pcur.getString(pcur.getColumnIndex(
           ContactsContract.CommonDataKinds.Phone.NUMBER));
           phoneNumbers += strPhoneNumber + ":";
     }
        phoneNumbers += "\n";
        pcur.close();   

        String name = cur.getString(cur.getColumnIndex("display_name"));
        mp.put(NAME, name);
        mp.put(NUMBER, phoneNumbers);
        listData.add(mp);
    }
    cur.close();   

    // 建立一个适配器去查询数据
    ListAdapter adapter = new SimpleAdapter(this, listData, android.R.layout.simple_list_item_2,
        new String[]{NAME, NUMBER},
        new int[] {android.R.id.text1, android.R.id.text2});
    mListView.setAdapter(adapter);
    //为listView添加事件监听
    mListView.setOnItemSelectedListener(new ListView.OnItemSelectedListener(){
      @Override
      public void onItemSelected(AdapterView<?> parent, View view,
          int position, long id) {
        Toast.makeText(getApplicationContext(), "当前所在行为:"+Long.toString(parent.getSelectedItemId()+1), 1).show();
      }   

      @Override
      public void onNothingSelected(AdapterView<?> parent) {
        // TODO Auto-generated method stub   

      }   

    });
  }
}

       2.GridView的Android开发实例

GridView 网格视图,用于显示多行多列。直接上示例:

XML/HTML代码

<?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"
  android:background="@drawable/bg"
  >
  <GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:numColumns="3"/>   

</LinearLayout>
XML/HTML代码
<?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" android:scrollbars="vertical">
   <ImageView
        android:layout_height="100dip"
        android:id="@+id/ItemImage"
        android:layout_width="80dip"
        android:src="@drawable/png1"
        android:layout_gravity="center_horizontal"/>    

     <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:id="@+id/ItemText" />
</LinearLayout>

Java代码

package net.csdn.blog.androidtoast;   

import java.util.ArrayList;
import java.util.HashMap;   

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;   

public class MainActivity extends Activity {
  /** Called when the activity is first created. */
  //定义图片整型数组
  private int[] mImages={
      R.drawable.png1,
      R.drawable.png2,
      R.drawable.png3,
      R.drawable.png4,
      R.drawable.png5,
      R.drawable.png6,
      R.drawable.png7,
      R.drawable.png8,
      R.drawable.png9   

  };
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);   

    //实例化GridView
    GridView mGridView=(GridView) findViewById(R.id.gridview);
    // 生成动态数组,并且传入数据
    ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();   

    for (int i = 0; i < 9; i++) {
      HashMap<String, Object> map = new HashMap<String, Object>();
      map.put("ItemImage", mImages[i]);// 添加图像资源的ID
      map.put("ItemText", "NO." + String.valueOf(i+1));// 按序号做ItemText
      lstImageItem.add(map);
    }
    //构建一个适配器
    SimpleAdapter simple = new SimpleAdapter(this, lstImageItem, R.layout.gridviewitem,
        new String[] { "ItemImage", "ItemText" }, new int[] {R.id.ItemImage, R.id.ItemText });
    mGridView.setAdapter(simple);
    //添加选择项监听事件
    mGridView.setOnItemClickListener(new GridView.OnItemClickListener(){
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast toast=Toast.makeText(getApplicationContext(), "你选择了"+(position+1)+"号图片", 1);
        toast.setGravity(Gravity.BOTTOM, 0, 0);
        toast.show();
      }   

    });   

  }
}

看了这两个Android开发实例,相信大家对ListView、GridView的使用有了一定掌握了。大家还可以使用它们和Adapter实现更多的功能试试。

以上就是对Android ListView 和GridView 的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

(0)

相关推荐

  • Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法

    Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法 ScrollView 下嵌套 ListView 或 GridView 会发列表现数据只能显示一行.因为他们都是滚动结构,两个滚动条放到一起就会引起冲突. 解决此问题可以通过计算 ListView 高度或重写 ListView 的 onMeasure 方法来解决.下面介绍通过重写 onMeasure 方法来解决问题. 重写 onMeasure 方法如下: public class ScrollLi

  • Android之ScrollView嵌套ListView和GridView冲突的解决方法

    那么里面的ScrollView高度计算就会出现问题.我们也就无法得到想要的效果.核心解决方案: 重写ListView或者GridView的OnMesure 方法. 复制代码 代码如下: public class MyListView extends ListView {        public MyListView(Context context) {                super(context);        }        public MyListView(Conte

  • android ListView和GridView拖拽移位实现代码

    关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:             首先说一下:拖拽ListView的item就不应该可以任意移动,只应该在ListView所在的范围内,而网易的你看看我都可以移动到状态栏了,虽然你做了处理,但是用户体验我个人感觉不好,在看看百度的,不仅控制了移动范围,更不错的百度的移动起来会时时的换位,看起来相当的形象,所以我认为这样相当的棒.说明一点

  • Android 中ListView和GridView赋值错位

    ListView和GridView多次调用getView的bug,导致赋值错位 最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误,上网搜索终于找到解决方案,以此记录下. 一.ListView 1.原因 因为listView一般用的是wrap_content,高度不确定,导致系统需要不断地测量,也就多次调用onMeasure方法,所以就多次调用getView. 2.解决 很简单,把宽高写死即可(明确给个数字或者

  • Android RecyclerView详解之实现 ListView GridView瀑布流效果

     什么是RecyclerView RecyclerView 是Google推出的最新的 替代ListView.GridView的组件,RecyclerView是用来显示大量数据的容器,并通过有限数量的子View,来提高滚动时的性能. 与ListView不同,RecyclerView 不再负责布局,而是专注于布局复用.布局主要通过 LayoutManager来管理,目前提供了3种常用的布局管理: LinearLayoutManager 线性布局管理器 (ListView效果) GridLayout

  • Android 中ScrollView嵌套GridView,ListView的实例

    Android 中ScrollView嵌套GridView,ListView的实例 在Android开发中,经常有一些UI需要进行固定style的动态布局,然而由于现在的UI都喜欢把一个界面拉的很长,所以我们很多情况下需要使用ScrollView来嵌套列表控件来实现UI.这样就导致了很多不顺心的问题. 问题一:列表控件显示不完全 原因是嵌套情况下,ScrollView不能正确的计算列表控件的高度. 有两种解决方案 方案一 在适配器赋值完成后代码动态计算列表的高度.这里贴出ListView的计算代

  • Android仿贴吧内容下的简单ListView嵌套GridView

    ListView嵌套GridView的简单实例 我的项目想实现一个listview里面的每个item都嵌套一个GridView,顶部还有主题等内容,如 总所周知,关于ListView嵌套GridView,最主要问题莫过于嵌套状态下滑动冲突问题,具体怎么解决,喜欢冗长无注释的代码的,请点击这里这篇文章跟其他的都大同小异了,不过在缺少注释的情况下,我发现了一点点小问题: /** * 创建日期:2017/3/21. * 说明:构造方法会根据你的SDK最低版本不同而要求不同,如18的至少必须重写前 *

  • 关于Android中ListView嵌套GridView的问题

    问题 在Android开发中,遇到一个问题,是ListView嵌套GridView,需要点击整个ListView的Item进行跳转.但是在点击GridView区域时无法进行页面的跳转.这是因为GridView获得了焦点.导致点击无法跳转. 解决方法就是: 1.在Item最外层加上 android:descendantFocusability="blocksDescendants" 2.在Adapter中添加 holder.mGridView.setClickable(false); h

  • Android开发之ImageLoader使用详解

    先给大家展示效果图,看看是大家想要的效果吗,如果还满意,请参考以下代码: 前言 UniversalImageLoader是用于加载图片的一个开源项目,在其项目介绍中是这么写的, •支持多线程图片加载 •提供丰富的细节配置,比如线程池大小,HTPP请求项,内存和磁盘缓存,图片显示时的参数配置等等: •提供双缓存 •支持加载过程的监听: •提供图片的个性化显示配置接口: •Widget支持(这个,个人觉得没必要写进来,不过尊重原文) 其他类似的项目也有很多,但这个作为github上著名的开源项目被广

  • Android开发之ListView、GridView 详解及示例代码

    ListView与GridView是Android开发中的常用控件,它们和Adapter配合使用能够实现很多界面效果.下面分别以实例说明ListView.GridView的用法.        1.ListView的Android开发实例 ListView 是android开发中最常用的控件之一,一般构成列表包括三个元素,ListView:用来展示列表的视图.Adapter:数据与视图连接的桥梁.Data:具体的数据包括字符串 .图片或者控件. 适配器一般有以下几种类型: ArrayAdapte

  • Android ListView组件详解及示例代码

    Android 列表组件 ListView 列表组件是开发中经常用到组件,使用该组件在使用时需要为它提供适配器,由适配器提供来确定显示样式和显示数据. 下面看一个例子: 新建一个项目Lesson8_ListViewTest,Activity name是MainListViewTest . MainListViewTest.java的代码是: package android.basic.lesson8; import android.app.Activity; import android.os.

  • Android 开发之旅:详解view的几种布局方式及实践

    引言 我们对Android应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用"Hello World!"程序来实践证明了.在继续深入Android开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍.View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Table Layout).网格视图(Grid View).标签布局(Tab Layo

  • android开发之Json文件的读写的示例代码

    Json格式是常见的读写形式.读写Json文件也是常用的操作. 这次来实践一下Json文件的读写. 首先在SD卡上的读写权限是一定要申请的.那么还是老办法,在 AndroidManifest.xml 文件中添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 这在android 6.0 以下的系统就足够了.6.0及以上的更新的系统,在代码中需要申请SD卡的读写权限. 先

  • Android开发之ListView实现Item局部刷新

    对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

  • Android开发之ListView列表刷新和加载更多实现方法

    本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法.分享给大家供大家参考.具体如下: 上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import andro

  • JSP 开发之Spring Security详解

    JSP 开发之Spring Security详解 前言: spring Security是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作. Spring Security 的前身是 Acegi Security ,是 Spring 项

  • 前端开发之CSS原理详解

    前端开发之CSS原理详解 从事Web前端开发的人都与CSS打交道很多,有的人也许不知道CSS是怎么去工作的,写出来的CSS浏览器是怎么样去解析的呢?当这个成为我们提高CSS水平的一个瓶颈时,是否应该多了解一下呢? 一.浏览器的发展与CSS 网页浏览器主要通过 HTTP 协议连接网页服务器而取得网页, HTTP 容许网页浏览器送交资料到网页服务器并且获取网页.目前最常用的 HTTP 是 HTTP/1.1,这个协议在 RFC2616 中被完整定义.HTTP/1.1 有其一套 Internet Exp

  • Android开发之ListView的head消失页面导航栏的渐变出现和隐藏

    1.Fragment页面xml布局: <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"

随机推荐