1。ArrayAdapter 是简单的adapter的一种,只能绑定一列。首先继承listActivity,然后利用setListAdapter方法加载ArrayAdapter
public class List1 extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mStrings));
getListView().setTextFilterEnabled(true);
}
private String[] mStrings =Cheeses.sCheeseStrings;
}
在sample中list10呈现出了listview单选效果,在sample中list11呈现出了listview多选效果
在sample中list12呈现了编辑listview条目并显示,继承了ListActivity类,并实现了OnClickListener, OnKeyListener类,并实现了void onClick(View v),boolean onKey(View v, int keyCode, KeyEvent event)方法
public void onClick(View v) {
sendText();
}
private void sendText() {
String text = mUserText.getText().toString();
mAdapter.add(text);
mUserText.setText(null);
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
sendText();
return true;
}
}
return false;
}
2。SimpleCursorAdapter是简单的adapter的一种,cursor通过内容解析器ContentResolver从数据库中获取值
Cursor c = getContentResolver().query(Contacts.CONTENT_URI,
CONTACT_PROJECTION, null, null, null);
SimpleCursorAdapter(Context, int, Cursor, String[], int[])其中string[]中是字段名,int[]是要用到的控件ID
3.重点:BaseAdapter。构造一个新的Adapter类(例如SpeechListAdapter)继承BaseAdapter类,1》构造SpeechListAdapter(Context context)方法;2》构造int getCount()方法:返回数据的长度;
3》构造Object getItem(int position) 方法,返回数据数组中的索引,如果用的是更复杂的数据结构,则返回代表该行的对象(任何对象都可以);4》构造long getItemId(int position)方法,用数组中的索引作为唯一的id;5》构造View getView(int position,View convertView,ViewGroup parent)方法:用来控制单行,将数据集的数据在指定的位置进行呈现,可以自己构造一个视图或者利用layout文件,当利用layout文件时,其父视图(GridView,ListView)将采用默认布局参数,除非利用inflate(int,android.view.ViewGroup,boolean)来指定根视图。position:数组中的索引,convertView:旧视图的重用。
if (convertView == null) {
tv = (TextView) LayoutInflater.from(mContext).inflate(android.R.layout.simple_expandable_list_item_1, parent, false);
} else {
tv = (TextView) convertView;
}
tv.setText(mStrings[position]);
return tv;
//SpeechView是自己构造的视图 上面一例是引用了的layout文件,并指定与父视图即listview的整体视图不同
SpeechView sv;
if (convertView == null) {
sv = new SpeechView(mContext, Shakespeare.TITLES[position],Shakespeare.DIALOGUE[position]);
} else {
sv = (SpeechView) convertView;
sv.setTitle(Shakespeare.TITLES[position]);
sv.setDialogue(Shakespeare.DIALOGUE[position]);
}
return sv;
如果存在单击事件,可以直接在继承了ListActivity的类中复写onListItemClick(ListView l,View v,int position,long id),其中l:单击事件发生的ListView,v:listview中发生单击事件的view,position:发生单击事件的索引值。
在sample中list6呈现出了单击一项,展开其内容的效果。用到了
public void toggle(int position) {
mExpanded[position] = !mExpanded[position];
//通知监听者基础数据已经改变,任何反应数据集的视图应该刷新自身
notifyDataSetChanged();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
((SpeechListAdapter)getListAdapter()).toggle(position);
}和
mDialogue.setVisibility(expanded ? VISIBLE : GONE);
在sample中list8呈现出了listview中添加照片,删除照片的效果。用到了
public View getView(int position, View convertView, ViewGroup parent) {
// Make an ImageView to show a photo
ImageView i = new ImageView(mContext);
i.setImageResource(mPhotos.get(position));
i.setAdjustViewBounds(true);
i.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
// Give it a nice background
i.setBackgroundResource(R.drawable.picture_frame);
return i;
}而没有用到convertView
在sample中list9呈现出了在按字母顺序排列的条目中,向上或向下滚动条目时,提示条目首字母(有延迟效果)。
浙公网安备 33010602011771号