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

简介: ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果   有这样一个Demo ,实现图片文字混合列表 1 package com.

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数组适配器)

 

相关文章
|
1天前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
4天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
3天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
14 5
|
1天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
2天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
11 3
|
6月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
395 1
|
3月前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。
|
3月前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
69 5
|
3月前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:技术选择的影响
【8月更文挑战第17天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚。本文通过比较这两个平台的编程语言、开发工具及市场策略,揭示了技术选择对开发者和产品成功的重要性。我们将从开发者的视角出发,深入探讨不同平台的技术特性及其对项目实施的具体影响,旨在为即将步入移动开发领域的新手提供一个清晰的指南,同时给予资深开发者新的思考角度。
49 3
|
3月前
|
编解码 Android开发 iOS开发
安卓与iOS开发:平台差异下的技术创新之路
在数字时代的浪潮中,移动应用开发如同两股潮流——安卓与iOS,各自携带着独特的技术生态和文化基因。本文将深入探讨这两大平台的开发环境、编程语言和工具的差异,以及它们如何塑造了不同的用户体验和技术趋势。通过比较分析,我们旨在揭示跨平台开发的可能性和挑战,同时探索未来技术创新的方向。让我们一起跟随代码的足迹,穿越安卓的开放草原和iOS的精密园林,发现那些隐藏在平台差异之下的创新机遇。
40 1