編輯:關於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(字型)標簽(空格分隔): Andro
關於Andorid的第三方庫導入和其他知識:現在講的都是些基礎的東西,東西會一步步往上升的,知道操作的可以在這裡找找問題 ,順便溫習下。然後不知道的就在這裡學習下。第三方
首先聲明一點: 這裡的多線程下載並不是指多個線程下載一個 文件,而是每個線程負責一個文件,今天給大家分享一個多線程下載的 例子。先看一下效果,點擊下載開始下載,同時顯示下
最近做的項目中,遇到個很棘手的問題: 客戶給我的數據是有限制的,因此,在返回某條具體頁面內容的時候,他只能給我一個html片段,裡面包含 文字,圖片以及附件的下載地址。如