編輯:Android開發實例
Adapter的作用就是ListView界面與數據之間的橋梁,當列表裡的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View。
優化的思路兩種:
1. View的重用
View的每次創建是比較耗時的,因此對於getview方法傳入的convertView應充分利用 != null的判斷
2.ViewHolder的應用
View的findViewById()方法也是比較耗時的,因此需要考慮只調用一次,之後就用View.getTag()方法來獲得ViewHolder對象
下面是優化後的代碼供參考:
public class MyAdapter extends BaseAdapter {
private Context mContext;
private LayoutInflater mInflater;
public MyAdapter(Context context) {
this.mContext = context;
mInflater = LayoutInflater.from(mContext);
}
public int getCount() {
return mmsList.size();
}
public Object getItem(int arg0) {
return arg0;
}
public long getItemId(int arg0) {
return arg0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.mmslistitem, null);
holder.img = (ImageView) convertView.findViewById(R.id.mmsflag);
holder.subject = (TextView) convertView.findViewById(R.id.mmssubject);
holder.date = (TextView) convertView.findViewById(R.id.mmsdate);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MMSDBItem mmsItem = mmsList.get(position);
holder.subject.setText(mmsItem.getSubject());
String today = DateFormat.format("yyyy-MM-dd",System.currentTimeMillis()).toString();
String dateStr = DateFormat.format("yyyy-MM-dd kk:mm",mmsItem.getDate()).toString();
holder.date.setText(dateStr);
if (mmsItem.getFlag() == 0) {
holder.img.setBackgroundResource(R.drawable.new_message_32);
} else {
holder.img.setBackgroundResource(R.drawable.message_already_read_32);
}
return convertView;
}
public final class ViewHolder {
public ImageView img;
public TextView subject;
public TextView date;
}
}
一般來說在Android裡要實現樹形菜單,都是用ExpandableList(也有高手自己繼承ListView或者LinearLayout來做),但是Expand
在前面的一篇文章中,簡單的介紹了一下如何實現軟鍵盤不自動彈出,使用的方法是設置android:windowSoftInput
這篇文章主要為大家分享了介紹了Android平台中實現數據存儲技術的5種方式,供大家學習,感興趣的小伙伴們可以參考一下 本文介紹Android中的5種數據存儲方式,具體
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩