Android - ListView ArrayAdapter VIewHolder
很久没写Android,一写突然忘掉一堆,也找不到我想要的解,
自己再重写一遍,(原来我认为的基本,结果当我需要的时候,找不到,这基本算是满重要的)
首先要先建立自己的Model
MessageItem 如下
public class MessageItem {
public String Title = "初始標題";
public String Content = "知始內容";
public String getTitle() {
return this.Title;
}
public void setTitle(String value) {
this.Title = value;
}
public String getContent() {
return this.Content;
}
public void setContent(String value) {
this.Content = value;
}
}
然后建立继承ArrayAdapter,并使用泛型
public class MessageListAdapter extends ArrayAdapter<MessageItem> {
private Context mContext;
static class ViewHolder{
TextView mTitle;
TextView mContent;
}
public MessageListAdapter(Context ctx) {
super(ctx, R.layout.item_message);
mContext = ctx;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_message, null);
holder.mTitle = (TextView) convertView.findViewById(R.id.tv_title);
holder.mContent = (TextView) convertView.findViewById(R.id.tv_content);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MessageItem item = this.getItem(position);
holder.mTitle.setText(item.getTitle());
holder.mContent.setText(item.getContent());
return convertView;
}
}
在Activity页面,取得ListView 后,设定Adapter
mListMessgae = (ListView) this.findViewById(R.id.list_message);
mAdapter = new MessageListAdapter(this);
mListMessgae.setAdapter(mAdapter);
这之间当然有要捞资料的部分使用的AsyncTask
public class LoadTask extends AsyncTask<Void, Void, Void> {
public List<MessageItem> mItems = new ArrayList<MessageItem>();
@Override
protected Void doInBackground(Void... voids) {
mItems = appApi.GetMessages();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mAdapter.clear();;
mAdapter.addAll(mItems);
mAdapter.notifyDataSetChanged();
}
}
Activity OnCreate的时候执行
LoadTask task = new LoadTask();
task.execute();
完成