編輯:關於Android編程
對於提升Android中頻繁使用的ListView子Item View的加載效率,基於兩點基本考慮:
1,Android的View的創建比較消耗資源;
2,findViewById()也不是最快的。
所以在實際開發中經常使用的適配器中的getView()方法:
public View getView(int position, View convertView, ViewGroup parent);
如果每次都在裡面創建一個新View出來,將導致效率低下,比較高效率的做法是每次判斷convertView是否為空,若不為空,則直接使用convertView的findViewById()把子View重建出來即可。
但是,這種做法雖然提升了效率,但仍不是最高效的做法,因為還是使用了findViewById()。
因此,進一步的效率提升改進之處是:使用一種稱為“ViewHolder”的技術,緩存convertView中的View組件,使用convertView的setTag()和getTag(),每次當ListView需要創建Item的View時候,調用convertView的getTag()找出ViewHolder,重新復用。具體的使用方法如代碼所示:
package zhangphil.listview;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView lv = this.getListView();
setContentView(lv);
ArrayAdapter adapter = new MyAdapter(this,
android.R.layout.simple_list_item_2);
lv.setAdapter(adapter);
}
private class MyAdapter extends ArrayAdapter {
private int resId;
private LayoutInflater mInflater;
private ViewHolder holder = null;
public MyAdapter(Context context, int resource) {
super(context, resource);
this.resId = resource;
mInflater = LayoutInflater.from(context);
}
//子View的“容器”
public final class ViewHolder {
public TextView text1;
public TextView text2;
}
@Override
public int getCount() {
//巨大的數據
return 10000;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(resId, null);
holder = new ViewHolder();
holder.text1=(TextView) convertView.findViewById(android.R.id.text1);
holder.text2=(TextView) convertView.findViewById(android.R.id.text2);
convertView.setTag(holder);
}
else
holder=(ViewHolder) convertView.getTag();
holder.text1.setText("text1:"+position);
holder.text2.setText("text2:"+position);
return convertView;
}
}
}
Android基礎入門教程——8.3.15 Paint API之——Typeface(字型)
Android基礎入門教程——8.3.15 Paint API之——Typeface(字型)標簽(空格分隔): Andro
關於Andorid的第三方庫導入和其他知識
關於Andorid的第三方庫導入和其他知識:現在講的都是些基礎的東西,東西會一步步往上升的,知道操作的可以在這裡找找問題 ,順便溫習下。然後不知道的就在這裡學習下。第三方
Android版多線程下載 仿下載助手(最新)
首先聲明一點: 這裡的多線程下載並不是指多個線程下載一個 文件,而是每個線程負責一個文件,今天給大家分享一個多線程下載的 例子。先看一下效果,點擊下載開始下載,同時顯示下
Android中WebView的相關使用
最近做的項目中,遇到個很棘手的問題: 客戶給我的數據是有限制的,因此,在返回某條具體頁面內容的時候,他只能給我一個html片段,裡面包含 文字,圖片以及附件的下載地址。如