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
相关推荐
ListView与BaseAdapter的配套使用 理解android 中adapter适配的作用 以及ListView的优化方式
Android-扩展BaseAdapter实现progressBar下载 * 该Demo涉及了BaseAdapter,ProgressBar,Handler,Thread,线程池; * * Android-扩展BaseAdapter实现progressBar下载 * 1.创建listview的xml * 2.创建listview中...
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...
很多朋友都来问我,如果要做一个列表,列表的每一项都是TextView和ImageView(或者其他组件)的组合,怎么做,现在,我就写一个简单的范例
这里面存放的是我博客中BaseAapter适配器的学习代码
NULL 博文链接:https://chaowen0668.iteye.com/blog/1017481
android中ArrayAdapter SimpleAdapter BaseAdapter 的使用
baseadapter
android listview的一个例子。使用了java的反射功能,实现自动构建adapter,不需要自己从BaseAdapter继承
为便于学习自定义的Adapter,本案例的界面未进行美化,功能已经实现,对于其中的getView(int position,View view ,ViewGroup vg)做了数据的填充操作。本案例功能及其简单,只涉及ListView中自定义适配器,没有对...
主要为大家详细介绍了Kotlin编写Android适配器Adapter的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
android-Stupid-Adapter?1,BaseAdapter、RecyclerView和一、适配器.zip
android中adapter整理,包括Baseadapter,Simpleadapter,cursoradapter的详细使用说明
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter BaseAdapter Java代码: public class ...
it's a normal Android listview adapter.The adapter extends BaseAdapter...
ListView的简单介绍与使用 GridView的简单介绍与使用 自定义BaseAdapter BaseAdapter的三种使用方式 ...BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
BaseAdapter 是一个我写的adapter的基类,感觉还是比较用,希望大家多提意见
基于Eclipse开发平台,Android中使用ListView和三种适配器(ArrayAdaper,SimpleAdapter,BaseAdapter)实现数据的填充。
该例中包含了常用的Adapter的使用,如baseadapter、simpleAdapter、SimlpeCursorAdapter和ArrayAdapter,例子写在一个工程中的。请注意切换清单文件中启动的Activity。
android-Stupid-Adapter 一个比较蠢的adapter,一切只是为了少写两行代码, 支持listview,gridView, recyclerview, 的adapter, 开发者只需要关注 item View 和 数据的关系,业务逻辑.剩下的一切交给我 将viewholder,与 ...