`
未来程序员
  • 浏览: 26088 次
社区版块
存档分类
最新评论

Android Adapter之BaseAdapter

 
阅读更多



 1.概念

Adapter英文意思 适配器

 

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系:



 (盗图可耻,但是很直观)



 

我们可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。

  • BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
  • ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据row id),为了让ui事件相应处理方便点最好重写getItemId;
  • SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。

 

 

BaseAdapter的所有接口:



最常用的有getView(),它是将获取数据后的View组件返回,如ListView中每一行里的TextView、Gallery中的每个ImageView。

getItemId(),返回数据的id

getItem(),将获取数据的某个位置的数据返回 如array[0],array[1].....

getCount()将获取数据的个数返回

 

BaseAdapter 是一个 抽象类 如果使用我们必须自己去实现

下边引用一个例子:



 我用了4个插件Spinner,ListView ,Gallery,GridView

 

 

package com.example.fouradpater_2;

import android.os.Bundle;
import android.provider.MediaStore.Images;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

public class MainActivity extends Activity {
	//作为一个adapter用于转换的“过渡”view
	private LayoutInflater mInflater;
	//定义一个数组用来存放数据
	private static final String[] mad = {"4","3","2","1"};
	//定义四个插件
	private Spinner mSpinner;
	
	private GridView mGridView;
	
	private Gallery mGallery;
	
	private ListView mListView;
	//定义一个adapter
	private Adapter mAdapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		mInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		mInflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		
		//关联四个组件
		mSpinner = (Spinner) findViewById(R.id.spinner1);
		mGridView = (GridView) findViewById(R.id.gridView1);
		mGallery = (Gallery) findViewById(R.id.gallery1);
		mListView = (ListView) findViewById(R.id.listView1);
		//new一个 Adapter 的 BaseAdapter
		mAdapter = new BaseAdapter() {
			
			@Override
			//最常用的有getView(),它是将获取数据后的View组件返回,
			//如ListView中每一行里的TextView、Gallery中的每个ImageView。
			public View getView(int position, View convertView, ViewGroup parent) {
				// TODO Auto-generated method stu

				TextView text;
				ImageView imgview;
				RelativeLayout rLayout;
				 if (convertView == null) {
					 rLayout = (RelativeLayout) mInflater.inflate(R.layout.new_file, parent, false);
//					 view = new TextView(MainActivity.this);
			        } else {
			        	rLayout = (RelativeLayout) convertView;
			        }
				String item = (String) getItem(position);
//				rLayout.setTag(item.toString());
				text = (TextView) rLayout.findViewById(R.id.TextView2);
//				text.setText(item.toString());   画蛇添足
				text.setText(item);
				
				imgview = (ImageView) rLayout.findViewById(R.id.ImageView1);
//				imgview.setId(R.drawable.ic_launcher);// 用错函数
				
				imgview.setImageResource(R.drawable.ic_launcher);
				
				
				return rLayout;
			}
			
			@Override
			//getItemId(),返回数据的id
			public long getItemId(int position) {
				return position;
			}
			
			@Override
			//getItem(),将获取数据的某个位置的数据返回 如array[0],array[1].....
			public Object getItem(int position) {
				return  mad[mad.length-1-position];
			}
			
			@Override
			//getCount()将获取数据的个数返回
			public int getCount() {
				
				return mad.length;
			}
		};

	
		mSpinner.setAdapter((SpinnerAdapter) mAdapter);
		mGridView.setAdapter((ListAdapter) mAdapter);
		mGallery.setAdapter((SpinnerAdapter) mAdapter);
		mListView.setAdapter((ListAdapter) mAdapter);
	}
		
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

 

记录下自己的错误,顺便做下记录和介绍

使用BaseAdapter ,必须将最基础的4个函数完善

<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">
    
    <ImageView
        android:id="@+id/ImageView1"
        android:layout_width="20dp"
        android:layout_height="20dp"
        
        />
    <TextView 
        android:id="@+id/TextView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/ImageView1"
        
        />
</RelativeLayout>

 这是BaseAdapter需要用到的xml,算是一个“过渡”的xml,用来给getView传递View

 

 

所以BaseAdapter比较万能,可以将各种储存结构通过Adapter 传递给需要的View

  • 大小: 26.6 KB
  • 大小: 11.5 KB
  • 大小: 16.5 KB
  • 大小: 54.9 KB
分享到:
评论
2 楼 dingran 2013-08-27  
哪4个基本函数呢?

这些函数又是从哪定义的呢?

你是怎么知道了都有哪些view必须要使用adapter呢?

如果这些view不使用adapter行不行呢?为什么呢?
1 楼 dingran 2013-08-27  
代码里面没加注释,也没说明白你是怎么使用的,还是从代码中注释说明每一个代码块的作用吧,

这样初学者也能看得懂,也说明了你是真的懂了。ok?楼主加油。

相关推荐

    android BaseAdapter listView优化

    首先,我们来理解一下Adapter在Android中的作用。Adapter是连接数据源和UI组件的桥梁,它负责将数据转化为可显示的视图。在ListView中,BaseAdapter是一个抽象类,你需要继承它并实现其中的方法,如`getView()`,来...

    Android-扩展BaseAdapter实现progressBar下载

    Android-扩展BaseAdapter实现progressBar下载 * 该Demo涉及了BaseAdapter,ProgressBar,Handler,Thread,线程池; * * Android-扩展BaseAdapter实现progressBar下载 * 1.创建listview的xml * 2.创建listview中...

    android开发之BaseAdapter

    首先,`BaseAdapter`是Android SDK提供的一个抽象类,它实现了`Adapter`接口,主要负责处理数据与UI元素之间的绑定。当你需要自定义列表或者网格视图的显示逻辑时,通常会继承`BaseAdapter`并重写其中的方法。 在...

    android自定义的Adapter--BaseAdapter范例

    BaseAdapter是Android SDK提供的一个抽象类,它是所有自定义Adapter的基础。它要求开发者实现几个关键的方法,以使数据能够被适配器正确地绑定到UI组件上。下面是BaseAdapter的核心方法: 1. `getCount()`: 返回...

    android demo,BaseAdapter传递context的应用

    在Android开发中,`BaseAdapter`是一个非常关键的组件,它允许我们自定义ListView、GridView等控件的数据展示方式。本教程将深入探讨如何在`BaseAdapter`中使用`Context`,并通过一个名为`AdapterTest2`的示例来阐述...

    android adapter详解

    Android Adapter 详解 Android Adapter 是 Android 开发中一个重要的组件,负责将数据绑定到用户界面中。今天,我们将深入探讨 Android Adapter 的原理和实现方式。 什么是 Android Adapter? Android Adapter 是...

    Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

    在Android开发中,BaseAdapter是一个非常重要的类,它充当了数据模型与视图组件(如Spinner、ListView、GridView等)之间的桥梁。这篇博客将深入探讨如何利用BaseAdapter在各种控件中实现数据绑定和交互。 首先,...

    android中自定义适配器BaseAdapter

    BaseAdapter是Android SDK提供的一种抽象类,它是Adapter接口的一个实现,允许开发者根据自己的需求扩展并定制数据与UI之间的绑定方式。 **一、BaseAdapter基本概念** BaseAdapter充当了数据源和UI组件之间的桥梁...

    Android 适配器——BaseAdapter

    在Android开发中,适配器(Adapter)是一个关键的概念,它起到了桥梁的作用,连接数据源与视图组件,使得数据可以被显示在ListView、GridView、Spinner等控件中。BaseAdapter是所有自定义适配器的基类,它提供了一个...

    Android之ListView+BaseAdapter左右按键切换

    在这个"Android之ListView+BaseAdapter左右按键切换"的项目中,我们将会深入探讨如何利用ListView结合BaseAdapter实现通过键盘左右按键来切换并更新ListView中的数据。BaseAdapter是Android系统提供的一种适配器,它...

    android之各种Adapter加载数据

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据源与UI展示之间的桥梁作用。本文将深入探讨Android的Adapter机制,以及如何使用各种Adapter来加载数据。 首先,我们需要理解Adapter的基本概念。...

    Android代码-BaseAdapter

    BaseAdapter This project is to encapsulate listview or GridView as well as Adapter. RecyclerView this project is to watch the Zhang Hongyang teacher's video and inspired by the also has a lot of older...

    android ListActivity 和 BaseAdapter 实例

    在Android开发中,`ListActivity`和`BaseAdapter`是两个关键组件,它们共同用于创建显示数据列表的应用界面。理解并熟练使用这两个组件对于构建用户友好的、数据驱动的Android应用至关重要。 `ListActivity`是...

    Android基础类之BaseAdapter

    在Android开发中,BaseAdapter是一个核心组件,它用于在ListView、GridView等可滚动视图中显示数据。这个组件是适配器模式的具体实现,能够将数据集与UI控件进行绑定,使得数据能够以列表的形式展示给用户。下面我们...

    Android自定义adapter的listview

    在Android开发中,ListView是一种常用的...自定义Adapter是Android开发中的核心技能之一,掌握好这一技巧,能帮助我们实现各种复杂的界面效果。通过不断实践和优化,我们可以在保证性能的同时,让用户体验更加出色。

    BaseAdapter的使用与优化

    在Android开发中,ListView是展示大量数据常用的组件,而BaseAdapter是它的重要伙伴,用于将数据绑定到ListView的各个Item视图上。本教程通过一个Eclipse下的Android工程实例,详细讲解了BaseAdapter的使用方法以及...

    Android必学-BaseAdapter的使用与优化

    在Android开发中,BaseAdapter是一个基础且至关重要的组件,它为ListView、GridView等视图提供数据绑定的功能。本文将深入探讨BaseAdapter的使用方法以及如何对其进行优化,让你在使用Android Studio开发时能写出...

    Android之Adapter用法总结

    ### Android之Adapter用法总结 #### 一、概念与作用 **Adapter** 是 Android 开发中连接后端数据和前端视图的一个关键组件。它作为数据和用户界面(UI)之间的桥梁,在Android开发中扮演着极其重要的角色。尤其是...

    android中adapter的使用

    在Android中,我们通常会遇到三种类型的Adapter:ArrayAdapter、SimpleAdapter和BaseAdapter。下面将详细介绍这三种Adapter的使用及其相关知识点。 1. ArrayAdapter ArrayAdapter是最基础的Adapter,它主要用于将一...

    android Adapter教程

    - **ArrayAdapter**:这是最简单的 Adapter 类之一,主要用于将数组或 List 集合中的数据绑定到 ListView 或 GridView 中。ArrayAdapter 支持泛型操作,适用于简单的数据展示场景,如仅需显示文本或图标的情况。 - ...

Global site tag (gtag.js) - Google Analytics