Android从零开始(十一)

知识点:BaseAdapter

一般的数据资料都是介绍用ArrayAdapter 、SimpleAdapter 、SimpleCursorAdapte,但是个人喜欢用BaseAdapter,原因很简单,BaseAdapter使用起来条理清楚,你想用列些什么数据就定义什么数据列出来,下面就看看它是怎么玩的吧···

首先看一下效果:




步骤一:编写布局(代码如下)
activity_main.xml:
Java代码 复制代码 收藏代码
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context=".MainActivity" >
  6. <ListView
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. android:id="@+id/list_view"
  10. />
  11. </RelativeLayout>



list_item_layout.xml:
Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal" >
  6. <ImageView
  7. android:layout_width="160dp"
  8. android:layout_height="100dp"
  9. android:scaleType="fitCenter"
  10. android:id="@+id/list_item_image"
  11. />
  12. <LinearLayout
  13. android:layout_width="fill_parent"
  14. android:layout_height="fill_parent"
  15. android:orientation="vertical"
  16. >
  17. <TextView
  18. android:layout_width="fill_parent"
  19. android:layout_height="wrap_content"
  20. android:gravity="center"
  21. android:textSize="30sp"
  22. android:id="@+id/list_item_txt1"
  23. />
  24. <TextView
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:textSize="15sp"
  28. android:id="@+id/list_item_txt2"
  29. />
  30. </LinearLayout>
  31. </LinearLayout>



步骤二、Activity准备数据(核心代码):

Java代码 复制代码 收藏代码
  1. package com.veryedu.baseadapter;
  2. import java.util.ArrayList;
  3. import com.example.baseadapter.R;
  4. import android.os.Bundle;
  5. import android.app.Activity;
  6. import android.util.Log;
  7. import android.view.LayoutInflater;
  8. import android.view.Menu;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.BaseAdapter;
  12. import android.widget.ImageView;
  13. import android.widget.ListView;
  14. import android.widget.TextView;
  15. public class MainActivity extends Activity {
  16. ArrayList data;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. ListView listView=(ListView)this.findViewById(R.id.list_view);
  22. //准备数据源
  23. data=new ArrayList();
  24. data.add(new HuoYing(R.raw.hyrz2_001, "粗眉", "不会忍术,但是体术超强,青春无极限"));
  25. data.add(new HuoYing(R.raw.hyrz2_002, "奈良鹿丸", "分析能力超强"));
  26. data.add(new HuoYing(R.raw.hyrz2_003, "李洛克", "体术的继承人"));
  27. data.add(new HuoYing(R.raw.hyrz2_004, "春野樱", "大扇子"));
  28. data.add(new HuoYing(R.raw.hyrz2_005, "天天", "超多刃具玩家"));
  29. data.add(new HuoYing(R.raw.hyrz2_006, "山中井野", "年轻猪肉跌蝶成员"));
  30. data.add(new HuoYing(R.raw.hyrz2_007, "日向宁次", "白眼,相当于望远镜吧"));
  31. listView.setAdapter(new BaseAdapter() {
  32. //getView,是BaseAdapter的核心方法
  33. //这个方法将决定数据以何种布局填充到哪些控件中
  34. @Override
  35. public View getView(int position, View convertView, ViewGroup parent) {
  36. // TODO Auto-generated method stub
  37. //为当前的View指定布局文件
  38. //如果是找控件,我们使用findViewById
  39. //如果是找资源,我们使用getResources
  40. //如果是找布局,我们使用LayoutInflater
  41. Log.v("TAG", "当前是第"+position+"项");
  42. //getView会被反复调用:当数据项在屏幕中显示的时候就调用这个方法
  43. //这每个数据项的布局是一样,仅仅只是数据不同,所以在这里进行一个判断
  44. //避免重复加载布局
  45. if(convertView==null){
  46. convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_layout,null);
  47. }
  48. //获取数据源中的数据
  49. HuoYing hy=(HuoYing)data.get(position);
  50. //获取当前项的控件
  51. ImageView image_view=(ImageView)convertView.findViewById(R.id.list_item_image);
  52. TextView text_view1=(TextView)convertView.findViewById(R.id.list_item_txt1);
  53. TextView text_view2=(TextView)convertView.findViewById(R.id.list_item_txt2);
  54. //将数据填充到控件中
  55. image_view.setImageResource(hy.image);
  56. text_view1.setText(hy.name);
  57. text_view2.setText(hy.mtext);
  58. return convertView;
  59. }
  60. @Override
  61. public long getItemId(int position) {
  62. // TODO Auto-generated method stub
  63. return position;
  64. }
  65. @Override
  66. public Object getItem(int position) {
  67. // TODO Auto-generated method stub
  68. return data.get(position);
  69. }
  70. @Override
  71. public int getCount() {
  72. // TODO Auto-generated method stub
  73. //一班都这么写,显示所有的数据
  74. return data.size();
  75. }
  76. });
  77. }
  78. @Override
  79. public boolean onCreateOptionsMenu(Menu menu) {
  80. // Inflate the menu; this adds items to the action bar if it is present.
  81. getMenuInflater().inflate(R.menu.activity_main, menu);
  82. return true;
  83. }
  84. }


posted on 2013-02-04 14:56  蜜雪薇琪  阅读(184)  评论(0编辑  收藏  举报