您的位置:首页 > 其它

从应用框架AF角度看ListView和Adapter by 高焕堂

2011-10-07 19:41 197 查看
在Android应用框架(Application Framework, 简称AF)里已经设计了许多类别,其中的

三个类别如下:



这用来协助Activity在UI画面上显示一个List窗口,例如:



请 你注意AF的特性:Activity、ListView和BaseAdapter两个类别已经由AndroidAF开发者设计在先。只是当时Android AF开发者并不知道应用程序(Applications,简称AP)里的List窗口的内容,所以预留了空间给AP程序员去补充,如下:





AF设计师与AP程序员两者在不同的时间及空间(即地点)合作。AF设计师在设计AF当时并不知道AP的List窗口里各选项的长相(文字或是图像等),因为这长相的决定是来自于AP的用户。所以只有AP程序员知道,AF设计师并不知道。于是,AF设计师负责撰写AF里的Super-class(如BaseAdapter)而AP程序员负责撰写AP里的Subclass(如myStringAdapter)。两者跨时间和空间的智能会合而成为一支完整好用的应用程序。例如,AP程序员知道他的UI将显示出单纯的文字型List窗口,所以就撰写myStringAdapter子类别。

当应用程序执行时,AF掌握整个控制权,呼叫ac01的onCreate()函数,询问AP程序员的见解:





在ac01的onCreate()函数里,AP程序员回答:由myStringAdapter子类别来提供内容及长相给ListView。于是,Activity要求显示ListView的内容时,ListView就从BaseAdapter而反向呼叫到myStringAdapter的getView()等函数,而取得显示的内容和长相了。





于此,请看一个简单的Android程序代码,来体会上述智慧会合的实现。此程序的画面显示一个单纯的文字List窗口:





其程序代码如下:

package xom.misoo.pkzz;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class ac01 extends Activity implements OnItemClickListener {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

ListView lv = new ListView(this);
lv.setAdapter(new myAdapter(this));
lv.setOnItemClickListener(this);
setContentView(lv);
}

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if(arg2 == 0)
setTitle(((TextView)arg1).getText());
else if(arg2 == 1)
finish();
}
}

package xom.misoo.pkzz;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class myAdapter extends BaseAdapter {
private Context ctx;
private ArrayList<String> coll;

public myAdapter(Context context) {
ctx = context;
coll  = new ArrayList<String>();
coll.add("Hello!!");
coll.add("Exit");
}
public int getCount() {
return coll.size();
}
public Object getItem(int position) {
return coll.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv;
if (convertView == null)
tv = new TextView(ctx);
else
tv = (TextView)convertView;
tv.setTextColor(Color.CYAN);
tv.setHeight(45);
tv.setTextSize(26);
tv.setText(coll.get(position));
return tv;
}
}


其于,这样的基本结构,就能进一步发展出各式各样的Adapter了。例如ArrayAdapter、SimpleAdapter等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐