這篇文章給大家介紹如何在android中對listview進(jìn)行優(yōu)化,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、紅山ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的紅山網(wǎng)站制作公司
1、listview在定義的時候?qū)捄透咦詈霉潭ㄒ幌?,這樣可以減少listview測量次數(shù),避免每次加載的時候都要去進(jìn)行測量。
2、分頁加載,這也是優(yōu)化之一,優(yōu)化內(nèi)存,還有體驗感,有興趣的可以試試大數(shù)據(jù)加載;
3、convertView 就是布局的復(fù)用;
4、ViewHolder的使用 目的減少findviewByID的次數(shù);
下面代碼驗證一下3和4。
public View getView(int position, View convertView, ViewGroup parent) { Log.e("========>>>>>", "getView-----position" + position); convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null); return convertView; }
也就是說如果這樣寫的話每次都會進(jìn)行布局的填充(滑動一下你就會發(fā)現(xiàn)每次都會打印日志),找到相應(yīng)的布局,如果每次都去填充的話肯定浪費(fèi)資源,所以我們這樣去寫
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null); Log.e("========>>>>>", "getView-----position" + position); } else { } return convertView; }
你會看到日志始終是這幾個數(shù)據(jù)(如果你頁面顯示5個那個這里的數(shù)據(jù)就應(yīng)該是六條會比顯示的數(shù)據(jù)多一條)。
ViewHolder
如果不使用viewHolder的話代碼就是這樣的
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null); } TextView textView = convertView.findViewById(R.id.tv); textView.setText(mArrayList.get(position)); return convertView; }
很明顯這段代碼每次textview 都得findViewById;你可能會說你可以在if判斷里面findViewById啊,然后在if外邊賦值啊,你可以試試 你會發(fā)現(xiàn)很有意思的事情,上下滑動幾次,你會發(fā)現(xiàn)數(shù)據(jù)就會混亂,并且重復(fù)數(shù)據(jù)很多。這樣顯然是不符合我們的要求的;
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null); viewHolder = new ViewHolder(); viewHolder.mTextView = convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.mTextView.setText(mArrayList.get(position)); return convertView; } public static class ViewHolder { private TextView mTextView; }
關(guān)于如何在android中對listview進(jìn)行優(yōu)化就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。