安卓开发_浅谈ListView(自定义适配器)

ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果

有这样一个Demo ,实现图片文字混合列表

 1 package com.example.work;
 2
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6
 7
 8 import android.R.integer;
 9 import android.os.Bundle;
10 import android.app.Activity;
11 import android.view.Menu;
12 import android.view.View;
13 import android.widget.AdapterView;
14 import android.widget.Toast;
15 import android.widget.AdapterView.OnItemClickListener;
16 import android.widget.ListView;
17
18 public class MainActivity extends Activity {
19     private ListView listview;
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_main);
24         listview = (ListView) findViewById(R.id.id_list);
25         //这里设置三个列表项,每个列表项对应一个图片和对应的文字
26         //图片数组
27         int image[] = new int[]{R.drawable.tou1,R.drawable.tou3,R.drawable.he};
28         //文字数组
29         String text[] = {"连连看","斗地主","爱消除"};
30         List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
31         //将一个图片和一个文字放入一个map集合中,并将map集合依次加入到list集合中
32         for(int i=0;i<image.length;i++)
33         {
34             HashMap<String, Object> map = new HashMap<String, Object>();
35             map.put("text", text[i]);
36             map.put("image", image[i]);
37             list.add(map);
38         }
39
40         //MyAdapter是自定义的适配器
41         MyAdapter myadapter = new MyAdapter(this, R.layout.layout_item, list);
42         listview.setAdapter(myadapter);
43
44         //点击列表项的响应事件
45         listview.setOnItemClickListener(new OnItemClickListener() {
46
47             @Override
48             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
49                     long arg3) {
50                 // TODO Auto-generated method stub
51                 Toast.makeText(MainActivity.this, "点击了第"+(arg2+1)+"项,内容:"+arg0.getItemAtPosition(arg2).toString(), 1).show();
52             }
53         });
54     }
55
56
57
58 }

MainActivity

自定义适配器

 1 package com.example.work;
 2
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7
 8
 9 import android.content.Context;
10 import android.view.LayoutInflater;
11 import android.view.View;
12 import android.view.ViewGroup;
13 import android.widget.BaseAdapter;
14 import android.widget.ImageView;
15 import android.widget.TextView;
16
17 public class MyAdapter extends BaseAdapter{
18
19     private Context context;//上下文
20     private int resourceId;//列表项的布局文件
21     private List<HashMap<String, Object>> list; //数据源
22     public MyAdapter(Context context,int resourceId,List<HashMap<String,Object>> list)
23     {
24         this.context = context;
25         this.resourceId = resourceId;
26         this.list = list;
27     }
28     //得到列表项的个数,即数据源的数据条数
29     @Override
30     public int getCount() {
31         int count = 0;
32         if(list!=null)
33         return list.size();
34         return count;
35     }
36
37     //得到对应position位置列表项的内容,即数据源list对应位置的数据
38     @Override
39     public Object getItem(int position) {
40
41         return list.get(position);
42     }
43
44     //得到列表项的id
45     @Override
46     public long getItemId(int position) {
47         // TODO Auto-generated method stub
48         return position;
49     }
50
51     @Override
52     public View getView(int position, View convertView, ViewGroup parent) {
53         // TODO Auto-generated method stub
54         //提高对对象的复用
55         View view = null;
56         if(convertView!=null)
57         {
58             view = convertView;
59         }
60         else
61         {
62             view = LayoutInflater.from(context).inflate(resourceId, parent,false);
63         }
64
65         ViewHolder holder = (ViewHolder) view.getTag();
66         if(holder==null)
67         {
68             holder = new ViewHolder();
69             holder.textView = (TextView) view.findViewById(R.id.id_textview);
70             holder.image = (ImageView) view.findViewById(R.id.id_image);
71             view.setTag(holder);
72         }
73         //给相应位置的图片和文字赋内容
74         holder.textView.setText(list.get(position).get("text").toString());
75         holder.image.setImageResource((Integer) list.get(position).get("image"));
76
77         //返回视图,这里的视图是一整个列表项的视图
78         return view;
79
80
81     }
82
83     class ViewHolder
84     {
85         TextView textView;
86         ImageView image;
87     }
88
89
90 }

自定义适配器

主Activity布局文件

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5
 6     tools:context=".MainActivity" >
 7
 8    <ListView
 9        android:layout_width="match_parent"
10        android:layout_height="match_parent"
11        android:id="@+id/id_list"
12        ></ListView>
13 </LinearLayout>

activity_main

列表项布局

 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     android:orientation="horizontal" >
 6
 7
 8     <ImageView android:layout_width="50dp"
 9         android:layout_height="50dp"
10         android:id="@+id/id_image"
11         />
12     <TextView
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:id="@+id/id_textview"
16         android:gravity="center_vertical"
17         android:textStyle="bold|italic"
18         />
19 </LinearLayout>

layout_item

效果图:

安卓开发_浅谈ListView(ArrayAdapter数组适配器)

安卓开发_浅谈ListView(SimpleAdapter数组适配器)

时间: 2024-10-01 14:54:03

安卓开发_浅谈ListView(自定义适配器)的相关文章

安卓开发_浅谈ListView之分页列表

前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据过大时,就可能会造成解析时间过长,占用内存过大等问题. 这时候想到用分页列表来显示这些数据,即每次只显示一个屏幕所能容纳条数的列表项数据,当用户手指向下拉动的时候,才再加载一个屏幕所能容纳的条数的数据,这样就解决了上述问题. -------------------------------------

安卓开发_浅谈Android动画(四)

Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属性动画类 方法 描述 setDuration(long duration) 设置动画持续时间的方法 setEvaluator(TypeEvaluator value) 设置插值计算的类型 setInterpolator(TimeInterpolator value) 设置时间插值器的类型 addUp

安卓开发_浅谈自定义组件

在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成.其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器. 其本身也是View类的子类. 在实际开发中,View类还不足以满足程序所有的需求.这时,便可以通过继承View类来开发自己的组件. 开发自定义组件的步骤: 1.创建一个继承android.view.View类的View类,并且重写构造方法. 2.根据需要重写相应的方法. 3.创建并实例化自定义View类,并将其添加到布局

安卓开发_浅谈AsyncTask

前些天面试一个培训班,老师问了俩安卓的问题,结果都没答出来,(- ̄(OO) ̄)ブ 一个是关于Listview的,我没大用过啊,不会.一个是关于AsyncTask的,没听过,更没用过...( ⊙o⊙ )千真万确 会的一个没问啊.~(≧▽≦)/~ 现在就来学习一下AsyncTask. 一.先介绍一下AsyncTask: 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验.但是在子线程中无法去操作主线程(

安卓开发_浅谈Notification(通知栏)

Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到NotificationManager对象: 第二步:对Notification的一些属性进行设置比如:内容,图标,标题,相应notification的动作进行处理等等: 第三步:通过NotificationManager对象的notify()方法来执行一个notification的快讯:   第四

安卓开发_浅谈Android动画(三)

一.LayoutAnimation布局动画 用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果 在res-anim文件下新建一个动画xml文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" 3 android:interpolat

安卓开发_浅谈Service

一.Service(服务) Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,区别在于它没有UI界面,是在后台运行的组件. public abstract class Service extends ContextWrapper implements ComponentCallbacks java.lang.Object ? android.content.Context ? android.content.ContextWrapper ?

安卓开发_浅谈OptionsMenus(选项菜单)

Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开发人员编程来实现的,如果在开发应用程序时没有实现该功能,那么程序运行时按下手机的meun键是不会起作用的. 这里就先学习 选项菜单OptionsMenus 创建选项菜单有两种方式 一.xml文件静态创建 7 package information; 8 9 import com.example.al

安卓开发_浅谈ContextMenu(上下文菜单)

长下文菜单,即长按view显示一个菜单栏 与OptionMenu的区别OptionMenu对应的是activity,一个activity只能拥有一个选项菜单ContextMenu对应的是View,每个View都可以设置上下文菜单一般情况下ContextMenu常用语ListView或者GridView; 创建和响应上下文菜单过程: 1.在activity的onCreate(...)方法中为一个view注册上下文菜单 2.在onCreateContextMenuInfo(...)中生成上下文菜单.