android自定义列表框,Android开发速成简洁教程十一:自定义Adapter显示列表

在介绍数据绑定时,我们使用了系统自带的SimpleAdapter。Android 允许自定义Adapter ,理论上可以使用任意的View(Layout)来显示数据。下图是对AndroidGraphics2DTutorial做改动,使用自定义 Adapter来显示示例Activity列表。

ea60088dbc86f6f52f5a1cccb310ad2a.png

在例子中我们把原来的AndroidGraphics2DTutorial改名为AndroidGraphics2DTutorial1,重新创建一个类AndroidGraphics2DTutorial来显示示例列表。打算使用三个View来显示列表中的一项,一个图标(例子中随机使用了一些图 标),一个文本框显示示例Activity名称,另一个文本框显示示例的具体信息。在res\layout目录下创建一个 activitylist.xml。内容如下:

37c42fd68fd21e68163e438c79ed7c73.png

这次我们不从AndroidManifest.xml中读取Activity列表,而是使用String Array资源。在res\value\string.xml 中添加下列Array资源:

Bezier

Brush

Colors

Font

Image

Path

Pen

Shape

Transform

Bezier

Pattern ,Gradients

Colors

FontDemo, FontTypes

DrawMap, JumbleImage, SeeThroughImage

Polys, Paths

Lines, Dashes, LineCap,LineJoin

Oval ,Pear ,Shape2DDemo

Transform

定义了这些资源后,可以在程序中使用自定义Adapter来显示列表:

class ActivityInfo{

int iconIndex;

String activityName;

String activityInfo;

}

class ActivityInfoAdapter extends ArrayAdapter{

int resource;

public ActivityInfoAdapter(Context context, int resourceId,

Listobjects) {

super(context, resourceId, objects);

resource=resourceId;

}

@Override

public View getView(int position,View ConvertView,ViewGroup parent){

LinearLayout activityInfoView;

ActivityInfo activityInfo=getItem(position);

String activity_Name=activityInfo.activityName;

String activity_Info=activityInfo.activityInfo;

int iconIndex=activityInfo.iconIndex;

if(ConvertView==null){

activityInfoView=newLinearLayout(getContext());

String inflater=Context.LAYOUT_INFLATER_SERVICE;

LayoutInflater vi;

vi=(LayoutInflater)getContext().getSystemService(inflater);

vi.inflate(resource, activityInfoView,true);

}else{

activityInfoView=(LinearLayout)ConvertView;

}

TextView activity_NameView

=(TextView)activityInfoView.findViewById(R.id.activityName);

TextView activity_InfoView

=(TextView)activityInfoView.findViewById(R.id.activityInfo);

ImageView iconView=(ImageView)activityInfoView.findViewById(R.id.iconImage);

activity_NameView.setText(activity_Name);

activity_InfoView.setText(activity_Info);

iconView.setImageResource(iconIndex);

return activityInfoView;

}

}

public class AndroidGraphics2DTutorial extends ListActivity {

private ArrayListactivityInfos

=newArrayList();

private ActivityInfoAdapter aa;

private final static String packgeName="com.pstreets.graphics2d";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Resources res=getResources();

String[] activity_Names=res.getStringArray(R.array.activity_name);

String[] activity_Infos=res.getStringArray(R.array.activity_info);

for(int i=0;i

ActivityInfo activityInfo=newActivityInfo();

activityInfo.activityName=activity_Names[i];

activityInfo.activityInfo=activity_Infos[i];

activityInfo.iconIndex=R.drawable.icon1+i;

activityInfos.add(activityInfo);

}

aa=newActivityInfoAdapter(this,R.layout.activitylist,activityInfos);

setListAdapter(aa);

}

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

ActivityInfo activityInfo= (ActivityInfo) l.getItemAtPosition(position);

Intent intent=newIntent();

intent.setClassName(this,

packgeName+".example." +activityInfo.activityName);

startActivity(intent);

}

}

类ActivityInfo定义列表每个元素的Data Model,为Activity的Icon资源ID,Activity Name以及Activity Info.

类ActivityInfoAdapter为自定义Adapter,关键的是public View getView(int position,View ConvertView,ViewGroup parent)。这个函数返回用来显示没个类别元素的View的示例。例子中为activitylist.xml 对应的Layout。

这个例子使用的列表框,自定义Adapter适用所有AdapterView,如Spinner,Gallery等。

【编辑推荐】

【责任编辑:milk TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值