大佬教程收集整理的这篇文章主要介绍了android – ListView使我的应用程序运行速度很慢,虽然我创建了Holder Class,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是我的程序大量调用getView()方法,并且我实现了Holder范例,但它仍然非常慢,也许有人可以启发我?
这是我的Adapter类:
import java.util.ArrayList; import android.content.Context; import android.LOCATIOn.LOCATIOn; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class IconListViewAdapterPharmacy extends ArrayAdapter<PharmacyListItem> { private ArrayList<PharmacyListItem> items; private Context cont; private LOCATIOn l; public IconListViewAdapterPharmacy(Context cont,int textViewresourcEID,ArrayList<PharmacyListItem> items,LOCATIOn l) { super(cont,textViewresourcEID,items); this.cont = cont; this.items = items; this.l = l; } @Override public View getView(int position,View convertView,ViewGroup parent) { View v = convertView; PharmacyListItem o = items.get(position); ViewHolder holder = new ViewHolder(); if (v == null) { LayoutInflater vi = (LayoutInflater)cont.getSystemservice(Context.LAYOUT_INFLATER_serviCE); v = vi.inflate(R.layout.icon_row_pharmacy,null); holder.tt = (TextView) v.findViewById(R.id.pharmacy_row_toptext); holder.address = (TextView) v.findViewById(R.id.pharmacy_row_address); holder.distance = (TextView) v.findViewById(R.id.pharmacy_row_distancE); holder.telephone = (TextView) v.findViewById(R.id.pharmacy_row_telephonE); // associate the holder with the view for later lookup v.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } holder.tt.setText(o.getName()); String add = "" + o.getAddress(); holder.address.setText("" + add.subString(0,add.lasTindexOf(","))); holder.telephone.setText("" + o.getTelephone()); String distancia = "" + o.getDistance(); if(l != null) holder.distance.setText("Distancia: " + distancia); return v; } static class ViewHolder { TextView tt; TextView address; TextView distance; TextView telephone; } }
PharmacyListItem类:
import android.LOCATIOn.LOCATIOn; public class PharmacyListItem { private String name; private double lat; private double lng; private String telephone; private double distance; public PharmacyListItem(LOCATIOn l,String name,double lat,double lng,String telephonE) { this.name = name; this.lng = lng; this.lat = lat; this.telephone = telephone; LOCATIOn l2 = new LOCATIOn(l); l2.setLatitude(lat); l2.setLongitude(lng); distance = l.distanCETo(l2); } public String getName() { return name; } public String getAddress() { return GeoLocator.getAddress(lat,lng); } public String getTelephone() { return telephone; } public String getDistance() { return (""+distancE).subString(0,(""+distancE).indexOf(".")) + "m."; } public double getDist() { return distance; }
}
任何想法将不胜感激!
谢谢你们!
编辑我粘贴我的.xml文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://scheR_362_11845@as.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" android:layout_marginRight="4dip" android:BACkground="@drawable/bg_detalle_1"> <ImageView android:id="@+id/arrow2" android:layout_width="wrap_content" android:layout_centerVertical="true" android:layout_height="wrap_content" android:layout_alignParentright="true" android:layout_alignParentBottom="true" android:singleLine="true" android:ellipsize="marquee" android:layout_marginRight="4dip"/> <LinearLayout android:padding="10dip" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout3" android:orientation="vertical"> <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="match_parent"> <TextView android:gravity="center" android:textColor="#525252" android:layout_height="fill_parent" android:singleLine="true" android:ellipsize="marquee" android:text="" android:textStyle="bold" android:id="@+id/pharmacy_row_toptext" android:layout_width="wrap_content" android:layout_marginRight="6dip"></TextView> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout2" android:layout_width="match_parent"> <TextView android:layout_height="fill_parent" android:text="TextView" android:id="@+id/pharmacy_row_address" android:layout_width="wrap_content" android:layout_marginRight="6dip"></TextView> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout5"> <TextView android:gravity="center" android:layout_height="fill_parent" android:text="TextView" android:singleLine="true" android:ellipsize="marquee" android:layout_width="wrap_content" android:id="@+id/pharmacy_row_telephone"></TextView> </LinearLayout> <LinearLayout android:layout_gravity="right" android:layout_height="wrap_content" android:id="@+id/linearLayout5" android:layout_width="match_parent"> <TextView android:layout_height="fill_parent" android:text="TextView" android:singleLine="true" android:ellipsize="marquee" android:layout_width="wrap_content" android:id="@+id/pharmacy_row_distance"></TextView> </LinearLayout> </LinearLayout> </LinearLayout>
public IconListViewAdapterPharmacy(Context cont,LOCATIOn l) { super(cont,items); this.cont = cont; this.items = items; this.l = l; }
做这个
public IconListViewAdapterPharmacy(Context cont,items); this.l = l; }
然后在getView访问项中使用getItem(position)而不是items.get(position)并获取上下文调用getContext().
编辑:
如果您有要下载和显示的配置文件图像,可以像以后一样获取地址并更新UI.
String add = "" + o.getAddress(); if (TextUtils.IsEmpty(add)) { // download the geoLOCATIOn. pass the position to the downloader thread which will update the item at position with address,after fetching is complete. new GetAddressTask(position).execute(o); }
这将释放UI线程专注于显示listview.
class GetAddressTask extends Asynctask<.......> { int mPosition = -1; public void GetAddressTask(int position) { mPosition = position; } String doInBACkground(parameters) { return GeoLOCATIOn.getaddress(parameter[0]); } void onPostExecute(String result) { // this runs on UI thread. // use mPosition here. // update addapter item with this address thats in 'result' variable. // and call adapter.notifyDataseTinvalidated() }
以上是大佬教程为你收集整理的android – ListView使我的应用程序运行速度很慢,虽然我创建了Holder Class全部内容,希望文章能够帮你解决android – ListView使我的应用程序运行速度很慢,虽然我创建了Holder Class所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。