Android从零开始(十一)
知识点:BaseAdapter
一般的数据资料都是介绍用ArrayAdapter 、SimpleAdapter 、SimpleCursorAdapte,但是个人喜欢用BaseAdapter,原因很简单,BaseAdapter使用起来条理清楚,你想用列些什么数据就定义什么数据列出来,下面就看看它是怎么玩的吧···
首先看一下效果:
步骤一:编写布局(代码如下)
activity_main.xml:
list_item_layout.xml:
步骤二、Activity准备数据(核心代码):
一般的数据资料都是介绍用ArrayAdapter 、SimpleAdapter 、SimpleCursorAdapte,但是个人喜欢用BaseAdapter,原因很简单,BaseAdapter使用起来条理清楚,你想用列些什么数据就定义什么数据列出来,下面就看看它是怎么玩的吧···
首先看一下效果:
![](http://dl.iteye.com/upload/attachment/0080/1767/a1d4517c-1be4-3f8c-bedb-f04a0e0e02d4.png)
步骤一:编写布局(代码如下)
activity_main.xml:
- <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"
- tools:context=".MainActivity" >
- <ListView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/list_view"
- />
- </RelativeLayout>
list_item_layout.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal" >
- <ImageView
- android:layout_width="160dp"
- android:layout_height="100dp"
- android:scaleType="fitCenter"
- android:id="@+id/list_item_image"
- />
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="30sp"
- android:id="@+id/list_item_txt1"
- />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textSize="15sp"
- android:id="@+id/list_item_txt2"
- />
- </LinearLayout>
- </LinearLayout>
步骤二、Activity准备数据(核心代码):
- package com.veryedu.baseadapter;
- import java.util.ArrayList;
- import com.example.baseadapter.R;
- import android.os.Bundle;
- import android.app.Activity;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- ArrayList data;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ListView listView=(ListView)this.findViewById(R.id.list_view);
- //准备数据源
- data=new ArrayList();
- data.add(new HuoYing(R.raw.hyrz2_001, "粗眉", "不会忍术,但是体术超强,青春无极限"));
- data.add(new HuoYing(R.raw.hyrz2_002, "奈良鹿丸", "分析能力超强"));
- data.add(new HuoYing(R.raw.hyrz2_003, "李洛克", "体术的继承人"));
- data.add(new HuoYing(R.raw.hyrz2_004, "春野樱", "大扇子"));
- data.add(new HuoYing(R.raw.hyrz2_005, "天天", "超多刃具玩家"));
- data.add(new HuoYing(R.raw.hyrz2_006, "山中井野", "年轻猪肉跌蝶成员"));
- data.add(new HuoYing(R.raw.hyrz2_007, "日向宁次", "白眼,相当于望远镜吧"));
- listView.setAdapter(new BaseAdapter() {
- //getView,是BaseAdapter的核心方法
- //这个方法将决定数据以何种布局填充到哪些控件中
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- //为当前的View指定布局文件
- //如果是找控件,我们使用findViewById
- //如果是找资源,我们使用getResources
- //如果是找布局,我们使用LayoutInflater
- Log.v("TAG", "当前是第"+position+"项");
- //getView会被反复调用:当数据项在屏幕中显示的时候就调用这个方法
- //这每个数据项的布局是一样,仅仅只是数据不同,所以在这里进行一个判断
- //避免重复加载布局
- if(convertView==null){
- convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_layout,null);
- }
- //获取数据源中的数据
- HuoYing hy=(HuoYing)data.get(position);
- //获取当前项的控件
- ImageView image_view=(ImageView)convertView.findViewById(R.id.list_item_image);
- TextView text_view1=(TextView)convertView.findViewById(R.id.list_item_txt1);
- TextView text_view2=(TextView)convertView.findViewById(R.id.list_item_txt2);
- //将数据填充到控件中
- image_view.setImageResource(hy.image);
- text_view1.setText(hy.name);
- text_view2.setText(hy.mtext);
- return convertView;
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return data.get(position);
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- //一班都这么写,显示所有的数据
- return data.size();
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }