Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListView,GridView)都有自己的适配器(记起来麻烦)。但是BaseAdapter(一招鲜)对他们来说却是通用的,为什么这么说呢,首先我们看一下API文档:

我们看一下BaseAdapter已经实现了ListAdapter和SpinnerAdapter的接口,而GridView的适配器是实现了ListAdapter接口,只不过是二维的。所以说BaseAdapter对他们三者来说是通用的。

下面我来说一下BaseAdapter的主要用法.就是我们定义一个类(如:MyAdapter)而这个类继承BaseAdapter.因为它是implements了ListAdapter和SpinnerAdapter的接口,所以要实现里面的方法,代码如下(未作任何改动的):

  1. private class MyAdapter extends BaseAdapter{
  2. @Override
  3. public int getCount() {
  4. // TODO Auto-generated method stub
  5. return 0;
  6. }
  7. @Override
  8. public Object getItem(int arg0) {
  9. // TODO Auto-generated method stub
  10. return null;
  11. }
  12. @Override
  13. public long getItemId(int position) {
  14. // TODO Auto-generated method stub
  15. return 0;
  16. }
  17. @Override
  18. public View getView(int position, View convertView, ViewGroup parent) {
  19. // TODO Auto-generated method stub
  20. return null;
  21. }
  22. }

为了便于大家理解,老规矩写一个简单的Demo,大家按我的步骤来就OK了.

第一步:新建一个Android工程命名为BaseAdapterDemo.

第二步:修改main.xml代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="Welcome to Mr Wei's Blog"
  11. />
  12. <Spinner
  13. android:id="@+id/spinner"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. />
  17. <ListView
  18. android:id="@+id/listview"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. />
  22. <GridView
  23. android:id="@+id/gridview"
  24. android:layout_width="fill_parent"
  25. android:layout_height="wrap_content"
  26. />
  27. </LinearLayout>

第三步:修该BaseAdapterDemo.java代码如下:

  1. package com.tutor.baseadapter;
  2. import android.app.Activity;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.GridView;
  9. import android.widget.ListView;
  10. import android.widget.Spinner;
  11. import android.widget.TextView;
  12. public class BaseAdapterDemo extends Activity {
  13. private Spinner mSpinner;
  14. private ListView mListView;
  15. private GridView mGridView;
  16. private MyAdapter mMyAdapter;
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. setupViews();
  22. }
  23. public void setupViews(){
  24. mMyAdapter = new MyAdapter();
  25. mSpinner = (Spinner)findViewById(R.id.spinner);
  26. mSpinner.setAdapter(mMyAdapter);
  27. mListView = (ListView)findViewById(R.id.listview);
  28. mListView.setAdapter(mMyAdapter);
  29. mGridView = (GridView)findViewById(R.id.gridview);
  30. mGridView.setAdapter(mMyAdapter);
  31. mGridView.setNumColumns(2);
  32. }
  33. //定义自己的适配器,注意getCount和getView方法
  34. private class MyAdapter extends BaseAdapter{
  35. @Override
  36. public int getCount() {
  37. // 这里我就返回10了,也就是一共有10项数据项
  38. return 10;
  39. }
  40. @Override
  41. public Object getItem(int arg0) {
  42. return arg0;
  43. }
  44. @Override
  45. public long getItemId(int position) {
  46. return position;
  47. }
  48. @Override
  49. public View getView(int position, View convertView, ViewGroup parent) {
  50. // position就是位置从0开始,convertView是Spinner,ListView中每一项要显示的view
  51. //通常return 的view也就是convertView
  52. //parent就是父窗体了,也就是Spinner,ListView,GridView了.
  53. TextView mTextView = new TextView(getApplicationContext());
  54. mTextView.setText("BaseAdapterDemo");
  55. mTextView.setTextColor(Color.RED);
  56. return mTextView;
  57. }
  58. }
  59. }

第四步:运行程序效果图如下:

效果图一:

效果图二:

等等,平时我在这里就和大家告别了,今天还没完呵呵,因为下面是我们的重点了,我们平常看的应用列表什么的,不是单单的一个TextView就可以了事的,所以我们可以在Layout里事先 定义好布局。这里我新建了一个名叫baseadapter_provider.xml文件,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <ImageView
  8. android:id="@+id/imageView"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:src="@drawable/icon"
  12. />
  13. <TextView
  14. android:id="@+id/textview"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="BaseAdapter"
  18. />
  19. </LinearLayout>

将getView()方法修改如下:

  1. @Override
  2. public View getView(int position, View convertView, ViewGroup parent) {
  3. // position就是位置从0开始,convertView是Spinner,ListView中每一项要显示的view
  4. //通常return 的view也就是convertView
  5. //parent就是父窗体了,也就是Spinner,ListView,GridView了.
  6. // TextView mTextView = new TextView(getApplicationContext());
  7. // mTextView.setText("BaseAdapterDemo");
  8. // mTextView.setTextColor(Color.RED);
  9. // return mTextView;
  10. //LayoutInflater不会的参照我的 Android 高手进阶教程(五)
  11. convertView = LayoutInflater.from(getApplicationContext()).inflate
  12. (R.layout.baseadapter_provider,null);
  13. TextView mTextView = (TextView)convertView.findViewById(R.id.textview);
  14. mTextView.setText("BaseAdapterDemo" + position);
  15. mTextView.setTextColor(Color.RED);
  16. return convertView;
  17. }

再次运行看一下效果图如下:

Ok,搞定了,呵呵,到这里我就要和大家 说再见了,大家 有什么不明白的地方可以留言,要源码的留下邮箱。thx~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值