android adapter使用,android BaseAdapter的使用

以前在用到BaseAadpter显示ListView、GridView、Spinner的时候,直接把网上现成的代码拿过来copy一下,然后修修改改就好了,一直也没有详细地总结一下,今天亲自动手写写,发现还是有不少问题的,先上个图看一下这个程序的运行结果:

0_1302760111HT45.gif

利用listview在界面上显示,根据不同的位置,显示不同的图片和文字。

第一步:在建立好工程后,首先来看看主类,BaseAdapterDemoActivity

package com.my;

import android.app.Activity;

import android.os.Bundle;

import android.widget.ListView;

public class BaseAdapterDemoActivity extends Activity

{

private DemoAdapter adapter = null;

private ListView myListView = null;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

setView();

}

private void setView()

{

myListView = (ListView) findViewById(R.id.my_listview);

adapter = new DemoAdapter(this);

myListView.setAdapter(adapter);

}

}

这个BaseAdapterDemoActivity很简单,就是new一个适配器,然后把适配器放到listview当中。

第二步:BaseAdapterDemoActivity的布局文件main.xml

android:id="@+id/my_linearlayout"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/my_listview"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

>

第三步:为要绘制的每一个条目创建一个布局文件,item_list.xml

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/myimageview"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/icon"

>

android:id="@+id/mytext"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/name"

/>

最后一步:也是关键所在,BaseAdapter

package com.my;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

public class DemoAdapter extends BaseAdapter

{

private Context c = null;

private LayoutInflater myInflater = null;

/**

* 构造函数

* @param myContext

*/

public DemoAdapter(Context myContext)

{

c = myContext;

}

@Override

public int getCount()

{

// TODO Auto-generated method stub

return 6;

}

@Override

public Object getItem(int position)

{

// TODO Auto-generated method stub

return position;

}

@Override

public long getItemId(int position)

{

// TODO Auto-generated method stub

return position;

}

/**

* 这个方法getView(),是用来逐一绘制每一条item

*

* setTag()会把View与ViewHolder绑定,形成一一对应的关系,拖动listview的时候会重新绘制每一条item

* 但是那些已经取得绑定的View,会调用getTag()方法,就不会重新绘制,而是拿到内存中已经取得的资源,提高了效率

*

* @param position position就是位置从0开始

* @param convertView convertView是Spinner,ListView中每一项要显示的view

* @param parent parent就是父窗体了,也就是Spinner,ListView,GridView了

* @return 通常return 的view也就是convertView

*/

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

// TODO Auto-generated method stub

ViewHolder holder = new ViewHolder();

if (convertView == null)

{

/**

* 在程序中动态加载以上布局:

* LayoutInflater flater = LayoutInflater.from(this);

* View view = flater.inflate(R.layout.example, null);

*/

myInflater = LayoutInflater.from(c);

convertView = myInflater.inflate(R.layout.item_list, null);

holder.icon = (ImageView) convertView

.findViewById(R.id.myimageview);

holder.text = (TextView) convertView.findViewById(R.id.mytext);

convertView.setTag(holder);

}

else

{

holder = (ViewHolder) convertView.getTag();

}

if (position <= 1)

{

holder.icon.setImageResource(R.drawable.icon);

holder.text.setText(R.string.text1);

}

else if (position <= 3 && position >= 2)

{

holder.icon.setImageResource(R.drawable.icon_b);

holder.text.setText(R.string.text2);

}

else

{

holder.icon.setImageResource(R.drawable.icon_c);

holder.text.setText(R.string.text3);

}

return convertView;

}

private class ViewHolder

{

TextView text;

ImageView icon;

}

}

在这段代码中有几点还是需要特别提出来:

1.构造函数public DemoAdapter(Context myContext)可以不用创建,这个创建是因为LayoutInflater需要一个Context;

2.方法public int getCount()是用来说明需要绘制的条目数量,这里是6条;

3.方法public View getView(int position, View convertView, ViewGroup parent)用来逐条绘制,也就是说每绘制一个条目就调用一次这个方法;

4.setTag() getTag()等在代码的注释中加了解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值