`
endual
  • 浏览: 3545269 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android中自定义ListView

 
阅读更多

 

Android中自定义ListView

分类: Android组件 7677人阅读 评论(5) 收藏 举报

1. 自定义ListView,效果图:

    自定义ListView

2. 代码实现:

 

    (1)res/layout/main.xml实现:

[java:firstline[1]] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent"  
  7.     >  
  8.       
  9.     <com.focus.fishme.SelfListView  
  10.         android:id="@+id/ListView"  
  11.         android:orientation="vertical"   
  12.         android:layout_width="fill_parent"  
  13.         android:layout_height="fill_parent"   
  14.         />  
  15.       
  16. </LinearLayout>  

 

    (2)ListView的Item布局实现:

[java:firstline[1]] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <LinearLayout   
  4.     xmlns:android = "http://schemas.android.com/apk/res/android"  
  5.     android:orientation = "vertical"   
  6.     android:layout_width = "fill_parent"  
  7.     android:layout_height = "fill_parent"  
  8.     >  
  9.   
  10.     <TextView   
  11.         android:id = "@+id/TextViewOne"  
  12.         android:layout_width = "wrap_content"   
  13.         android:layout_height = "wrap_content"  
  14.         android:layout_marginLeft = "10dip"   
  15.         android:textSize  =  "24sp"  
  16.         />  
  17.       
  18.     <TextView   
  19.         android:id = "@+id/TextViewTwo"   
  20.         android:layout_width = "wrap_content"  
  21.         android:layout_height = "wrap_content"  
  22.         android:layout_marginLeft = "10dip"   
  23.         />  
  24.       
  25.     <View   
  26.         android:layout_height = "1dip"   
  27.         android:layout_width = "fill_parent"  
  28.         android:background = "#FF0000"  
  29.         />  
  30.   
  31. </LinearLayout>  

 

    (3)主Activity实现:

[delphi:firstline[1]] view plaincopy
  1. package com.focus.fishme;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import android.app.Activity;  
  9. import android.os.Bundle;  
  10.   
  11. public class SelfListViewActivity extends Activity { 
  12.      
  13.     @Override 
  14.     public void onCreate(Bundle savedInstanceState) { 
  15.         super.onCreate(savedInstanceState); 
  16.          
  17.         /** 
  18.          * 设置主布局。 
  19.          */ 
  20.         setContentView(R.layout.main); 
  21.          
  22.         /** 
  23.          * ListView数据集。 
  24.          */ 
  25.         List<Map<String , Object>> mSelfData = new ArrayList<Map<String,Object>>(); 
  26.          
  27.         /** 
  28.          * 获取ListView组件。 
  29.          */ 
  30.         SelfListView mSelfListView = (SelfListView) findViewById(R.id.ListView); 
  31.          
  32.         /** 
  33.          * 生成数据。 
  34.          */ 
  35.         for (int i = 0; i < 10; i++) { 
  36.             HashMap<String, Object> mMap = new HashMap<String, Object>(); 
  37.             mMap.put("key_name", "name" + i); 
  38.             mMap.put("value_name", "value" + i); 
  39.             mSelfData.add(mMap); 
  40.         }  
  41.   
  42.         /**  
  43.          * 自定义Adapter。  
  44.          */  
  45.         final SelfAdapter mSelfAdapter = new SelfAdapter(this, mSelfData,   
  46.                 R.layout.item, new String[] { "key_name", "value_name" }, new int[] { R.id.TextViewOne, R.id.TextViewTwo });  
  47.           
  48.         /**  
  49.          * 向ListView设置Adapter。  
  50.          */  
  51.         mSelfListView.setSelfAdapter(mSelfAdapter);  
  52.     }  
  53.       
  54. }  

 

    (4)ListView所用Adapter实现:

[java:firstline[1]] view plaincopy
  1. package com.focus.fishme;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import android.content.Context;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.TextView;  
  12.   
  13. public class SelfAdapter extends BaseAdapter {  
  14.   
  15.     private LayoutInflater mLayoutInflater;  
  16.   
  17.     private int mResource;  
  18.     private List<? extends Map<String, ?>> mSelfData;  
  19.     private String[] from;  
  20.     private int[] to;  
  21.   
  22.     public SelfAdapter(Context context, List<? extends Map<String, ?>> data, int resouce, String[] from, int[] to) {  
  23.         this.mSelfData = data;  
  24.         this.mResource = resouce;  
  25.         this.mSelfData = data;  
  26.         this.from = from;  
  27.         this.to = to;  
  28.         this.mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  29.     }  
  30.   
  31.     public int getCount() {  
  32.         return mSelfData.size();  
  33.     }  
  34.   
  35.     public Object getItem(int position) {  
  36.         return mSelfData.get(position);  
  37.     }  
  38.   
  39.     public String get(int position, Object key) {  
  40.         Map<String, ?> map = (Map<String, ?>) getItem(position);  
  41.         return map.get(key).toString();  
  42.     }  
  43.   
  44.     public long getItemId(int position) {  
  45.         return position;  
  46.     }  
  47.   
  48.     /** 
  49.      * 生成ListView的Item布局。 
  50.      */  
  51.     public View getView(int position, View convertView, ViewGroup parent) {  
  52.         if (convertView == null) {  
  53.             convertView = mLayoutInflater.inflate(mResource, null);  
  54.         }  
  55.           
  56.         Map<String, ?> item = mSelfData.get(position);  
  57.           
  58.         int count = to.length;  
  59.           
  60.         for (int i = 0; i < count; i++) {  
  61.             View v = convertView.findViewById(to[i]);  
  62.             bindView(v, item, from[i]);  
  63.         }  
  64.           
  65.         convertView.setTag(position);  
  66.           
  67.         return convertView;  
  68.     }  
  69.   
  70.     private void bindView(View view, Map<String, ?> item, String from) {  
  71.         Object data = item.get(from);  
  72.           
  73.         if (view instanceof TextView) {  
  74.             ((TextView) view).setText(data == null ? "" : data.toString());  
  75.         }  
  76.     }  
  77.       
  78. }  

 

    (5)自定义ListView实现:

[java:firstline[1]] view plaincopy
  1. package com.focus.fishme;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.view.View;  
  6. import android.widget.BaseAdapter;  
  7. import android.widget.LinearLayout;  
  8.   
  9. public class SelfListView extends LinearLayout {  
  10.   
  11.     private BaseAdapter mSelfAdapter;  
  12.       
  13.     public SelfListView(Context context) {  
  14.         super(context);  
  15.     }  
  16.   
  17.     public SelfListView(Context context, AttributeSet attributeSet) {  
  18.         super(context, attributeSet);  
  19.     }  
  20.   
  21.     /** 
  22.      * 删除ListView中上一次渲染的View,并添加新View。 
  23.      */  
  24.     private void buildList() {  
  25.         if (mSelfAdapter == null) {  
  26.               
  27.         }  
  28.           
  29.         if (getChildCount() > 0) {  
  30.             removeAllViews();  
  31.         }  
  32.           
  33.         int count = mSelfAdapter.getCount();  
  34.           
  35.         for(int i = 0 ; i < count ; i++) {  
  36.             View view = mSelfAdapter.getView(i, nullnull);  
  37.             if (view != null) {  
  38.                 addView(view, i);  
  39.             }  
  40.         }  
  41.     }  
  42.       
  43.     public BaseAdapter getSelfAdapter() {  
  44.         return mSelfAdapter;  
  45.     }  
  46.   
  47.     /** 
  48.      * 设置Adapter。 
  49.      *  
  50.      * @param selfAdapter 
  51.      */  
  52.     public void setSelfAdapter(BaseAdapter selfAdapter) {  
  53.         this.mSelfAdapter = selfAdapter;  
  54.         buildList();  
  55.     }  
  56.       
  57. }  

 

分享到:
评论

相关推荐

    Android中自定义ListView控件实现下拉刷新

    "Android中自定义ListView控件实现下拉刷新" Android中自定义ListView控件实现下拉刷新是 Android 开发中常见的需求。下拉刷新(Pull-to-Refresh)是指在ListView中下拉时,触发刷新操作的机制。下拉刷新可以提高...

    Android中的自定义ListView

    参考链接提供的博客文章《Android自定义ListView实现详解》(https://blog.csdn.net/qq_34020487/article/details/89402562),作者详细介绍了自定义ListView的过程,包括创建自定义适配器、设置点击事件和优化性能...

    Android中自定义ListView,解决scrollview嵌套listview 滑动事件冲突

    在提供的MyListView文件中,可能就包含了自定义ListView解决滑动冲突的实现代码。通过查看和分析这个文件,我们可以学习到如何在代码层面解决此类问题,加深对Android事件分发机制的理解,并提升自定义控件的能力。 ...

    android listview 自定义样式实例

    自定义ListView的样式是提高用户体验和个性化应用设计的重要手段。以下将详细介绍如何在Android中实现ListView的自定义样式。 1. **自定义ListView的外观** - **自定义ListView项布局**:首先,你需要创建一个XML...

    android listview自定义控件例子

    本示例将深入探讨如何在Android中自定义ListView,包括它的创建、数据绑定以及实现一些视觉效果。 首先,创建一个ListView需要XML布局文件来定义它的结构。在`res/layout`目录下创建一个新的XML文件,例如`list_...

    android自定义listview使用方法

    本教程将详细讲解如何在Android中实现自定义ListView,包括基本的ListView、带图片的ListView以及带有按钮的ListView。 1. **基本的ListView** - 首先,你需要在布局文件中添加ListView元素,并为其设置ID。例如:...

    自定义ListView实现下拉刷新+加载更多功能Demo

    在Android开发中,自定义ListView实现下拉刷新和加载更多的功能是常见的需求,尤其是在构建具有数据流滚动和实时更新的应用程序时。这个"自定义ListView实现下拉刷新+加载更多功能Demo"旨在帮助开发者理解如何集成...

    Android 自定义ListView(下拉刷新PullToRefreshListView 上拉加载LoadListView)

    Android 自定义ListView,分别实现下拉刷新的ListView及上拉加载的ListView 详情可以参考我的博客 http://blog.csdn.net/sunshanai/article/details/51622917

    android 自定义listview分组显示本地json格式数据

    总结,实现“android 自定义listview分组显示本地json格式数据”需要完成以下步骤:解析本地JSON数据、创建自定义Adapter、处理点击事件以及设置HeaderListView。通过这样的方式,我们可以在Android应用中构建出一个...

    android 自定义ListView实现单选

    总结,自定义ListView实现单选是Android开发中常见的需求。通过创建自定义Adapter,处理点击事件,以及优化视图复用,我们可以轻松实现这一功能。同时,自定义ListView也能为开发者提供更大的灵活性,以满足各种复杂...

    Android自定义adapter的listview

    在ListView中,Adapter负责将数据项转化为ListView的ListItems。Android提供了一些预定义的Adapter,如ArrayAdapter和CursorAdapter,但它们可能无法满足所有需求,因此我们常常需要自定义Adapter。 自定义Adapter...

    Android 自定义listview 轻松实现360软件详情页

    自定义ListView可能包含了对滚动事件的特殊处理,而自定义HeaderView则可能是为了更好地集成到ListView中,提供更丰富的交互效果。 4. **实际应用**: - 将这两个自定义类复制到你的项目中,根据具体需求进行调整...

    TabHost中填充自定义ListView

    在Android开发中,`TabHost` 是一个非常重要的组件,用于实现多标签页面的切换,而将自定义的`ListView`填充到`TabHost`中则可以构建出复杂的交互界面。下面我们将详细探讨如何实现这一功能。 首先,我们需要了解`...

    自定义ListView和processBar

    本篇文章将详细探讨如何在Android中自定义ListView和实现两种不同的ProcessBar。 首先,自定义ListView涉及到的主要内容包括适配器(Adapter)的创建、视图复用(View Recycling)以及自定义视图(ViewHolder)的...

    android 自定义 listview

    总之,自定义ListView是Android开发中的核心技能之一,它涉及到数据绑定、视图复用、事件处理等多个方面。通过熟练掌握自定义Adapter,我们可以创造出丰富多样的列表视图,满足各种复杂的界面需求。

    android 自定义listview无法响应点击事件OnItemClickListener

    以上是关于“android 自定义listview无法响应点击事件OnItemClickListener”这一问题的详细分析和解决策略。在实际开发中,遇到此类问题,可以根据这些点逐一排查,通常能够找到问题所在并解决。对于Test2这个压缩包...

    android listview 高效显示网络图片,自定义listview布局

    这个问题的解决方法是高效地加载网络图片并自定义ListView的布局。 首先,我们需要了解异步加载的概念。异步加载是为了避免阻塞主线程,它将耗时的操作(如下载图片)放在后台线程中执行,然后在UI线程中更新显示...

    Android自定义ListView图片从服务端获取

    总之,Android自定义ListView从服务端获取图片涉及网络请求、图片加载库、缓存策略、ListView优化等多个环节,需要综合考虑性能和用户体验。通过熟练掌握这些技术,我们可以创建出高效、流畅的ListView应用。

    Android 自定义ListView + Gallery 组合

    在Android开发中,...总的来说,Android自定义ListView与Gallery组合的实现涉及到了数据绑定、视图复用、事件监听等多个核心知识点,通过熟练掌握这些技能,开发者可以构建出功能强大、用户体验优良的Android应用。

Global site tag (gtag.js) - Google Analytics