Android中BaseAdapter的使用
Android中BaseAdapter的使用
2013-05-17 22:28:02
通常在UI布局中会要用到ListView、Spinner、GridView等控件。而使用这些控件的时候会要用到适配器,适配器模式的可以看做数据与UI之间的桥梁。

在Android中主要提供了ArrayAdapter、SimpleAdapter、SimpleCursorAdapter、BaseAdapter......
ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果,SimpleCursorAdapter则可以从数据库中读取数据显示在列表上,通过从写BaseAdapter可以在列表上加处理的事件等。
通过最近对Adapter的了解,我还是不能很好的区分它们使用的情况。
在这里我主要分享一下常用的SimpleAdapter、BaseAdapter的区别(不知道是不是正确,有待考察)
区别一:数据来源的不同
BaseAdapter、SimpleAdapter:---数据来源于Arraylist-->MyArraylist
SimpleCursorAdapter:---数据来源于数据库--->MyCursor
区别二:BaseAdapter添加过的Item在下一次显示时是不需要重新构造的,这样可以大大提高效率。这主要是通过paramView.setTag(holder);来实现的,paramView是BaseAdapter中的一个参数,setTag()方法是设置标记,通过该方法就可以将已经浏览过的Item通过标记下次不再重构。
下面分享一下建立的一个BaseAdapter实例:
1、建立一个适配器类MyAdapter继承BaseAdapter
1 public class MyAdapter extends BaseAdapter{ 2 3 @Override 4 public int getCount() { 5 // TODO Auto-generated method stub 6 return 10;//一共放回了10个数据 7 } 8 9 @Override 10 public Object getItem(int position) { 11 // TODO Auto-generated method stub 12 return null; 13 } 14 15 @Override 16 public long getItemId(int position) { 17 // TODO Auto-generated method stub 18 return 0; 19 } 20 21 22 /** 23 * Positionj就是位置从0开始,convertView就是Spinner和ListView中每一项要显示的View 24 * 通常return的View就是convertView 25 * parent是父窗口,即Spinner,ListView,GridView 26 */ 27 @Override 28 public View getView(int position, View convertView, ViewGroup parent) { 29 // TODO Auto-generated method stub 30 TextView mTextView = new TextView(MyApplication.getAppContext()); 31 mTextView.setText("BaseAdapterDemo"); 32 mTextView.setTextColor(Color.BLUE); 33 return mTextView; 34 } 35 36 37 }
2、建立一个MyApplication类,该类主要是用来给非Activity类传递Context对象的
1 /** 2 * MyApplication类的建立一定要在AndroidManifest.xml中进行说明 3 * <application 4 android:name="MyApplication" 5 * @author Administrator 6 * 7 */ 8 public class MyApplication extends Application{ 9 private static Context context; 10 11 @Override 12 public void onCreate() { 13 // TODO Auto-generated method stub 14 // getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁 15 // Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁 16 context = this.getApplicationContext(); 17 super.onCreate(); 18 } 19 20 public static Context getAppContext(){ 21 return context; 22 23 } 24 25 }
3、建立BaseAdapterDemo
1 public class BaseAdapterDemo extends Activity { 2 private Spinner mSpinner; 3 private ListView mListView; 4 private GridView mGridView; 5 private MyAdapter mMyAdapter; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 setupView(); 12 } 13 14 /** 15 * 建立视图 16 */ 17 private void setupView() { 18 // TODO Auto-generated method stub 19 mMyAdapter = new MyAdapter(); 20 mSpinner = (Spinner) findViewById(R.id.mSpinner); 21 mSpinner.setAdapter(mMyAdapter); 22 mListView = (ListView) findViewById(R.id.mListView); 23 mListView.setAdapter(mMyAdapter); 24 mGridView = (GridView) findViewById(R.id.mGridView); 25 mGridView.setAdapter(mMyAdapter); 26 mGridView.setNumColumns(2);//设置GridView的列数 27 } 28 29 }
这里实现了Spinner、ListView、GridView添加Adapter
4、实现效果如下

当然,以上只是我对Android中Adapter的一点点认识,还要在后面的学习中不断积累经验。

浙公网安备 33010602011771号