Android personalizado listview muy lento al desplazarse

Chicos tengo un problema con mi listview. Funciona tan lento cuando se puede desplazar cualquiera puede ayudarme. Mi listview es la disposición de encargo usando relativo con 3 textview y 1 imageview cada fila con todo el contenido se recupera de la tela. Yo uso un adaptador personalizado y un titular de la vista.

Debajo de mis códigos en cómo utilizo el adaptador.

public class MessageList extends ListActivity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.listarticle); loadFeed(link); setListAdapter(new IconAdapter(this)); } /* This method load xml file and parse it into message object*/ private void loadFeed(String link){ try{ BaseFeedParser parser = new BaseFeedParser(link); messages = parser.parse(); titles = new ArrayList<String>(messages.size()); image = new ArrayList<String>(messages.size()); date_post = new ArrayList<String>(messages.size()); descs = new ArrayList<String>(messages.size()); for (Message msg : messages){ titles.add(msg.getTitle()); image.add(msg.getImageLink().toString()); date_post.add(msg.getDate()); descs.add(msg.getDescription()); } } catch (Throwable t){ Log.e("AndroidNews",t.getMessage(),t); } } /*this is my custom baseadapter */ class IconAdapter extends BaseAdapter{ private LayoutInflater mInflater; public IconAdapter(Context cxt){ mInflater = LayoutInflater.from(cxt); } public class ViewHolder{ private TextView title; private TextView date; private TextView desc; private ImageView thumb; } public View getView(int positiion, View convertView, ViewGroup parent){ ViewHolder holder; if (convertView==null){ convertView = mInflater.inflate(R.layout.row, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.date = (TextView) convertView.findViewById(R.id.date); holder.desc = (TextView) convertView.findViewById(R.id.deskripsi); holder.thumb = (ImageView) convertView.findViewById(R.id.thumbnail); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.title.setText(titles.get(positiion)); holder.date.setText(date_post.get(positiion)); holder.desc.setText(descs.get(positiion).substring(0, 55)+"..."); Drawable draw = LoadImageFromWebOperation(image.get(positiion)); holder.thumb.setImageDrawable(draw); return convertView; } /* this method take image from url that retrieve from xml*/ public Drawable LoadImageFromWebOperation(String url){ try{ InputStream is = (InputStream) new URL(url).getContent(); Drawable d = Drawable.createFromStream(is, "src name"); return d; }catch (Exception e){ Log.d("image", url, e); return null; } } @Override public int getCount() { return messages.size(); } @Override public Object getItem(int position) { return messages.get(position); } @Override public long getItemId(int position) { return position; } } 

4 Solutions collect form web for “Android personalizado listview muy lento al desplazarse”

  public View getView(int positiion, View convertView, ViewGroup parent){ ... Drawable draw = LoadImageFromWebOperation(image.get(positiion)); ... } 

Este es el problema. Usted nunca debe hacer la red en el hilo de la interfaz de usuario. Implementar alguna tarea asíncrona para el trabajo. Además, puede utilizar la herramienta traceview http://developer.android.com/guide/developing/tools/traceview.html para determinar cuellos de botella de rendimiento.

Este es tu problema, aquí mismo.

 Drawable draw = LoadImageFromWebOperation(image.get(positiion)); 

En lugar de hacer repetidas solicitudes URL en su getView() , hacer todas sus peticiones a la vez y almacenar los Drawables en una matriz, y luego utilizar la matriz dentro de la getView . Esto hará que sea considerablemente más rápido …

Echa un vistazo al enlace de esta respuesta: Desplazar grandes listas de adaptadores basados ​​en Cursor es más rápido que listas mucho más pequeñas de adaptadores en memoria

 Please use View Holder pattern in getview. ViewHolder holder = null; String fileName = arrfiles.get(position); if (convertView == null) { holder = new ViewHolder(); LayoutInflater inflator = ((Activity) context).getLayoutInflater(); convertView = inflator.inflate(R.layout.unsubmited_row, parent, false); convertView.setClickable(false); } else { holder = (ViewHolder) convertView.getTag(); } holder.txtFileName = (TextView) convertView .findViewById(R.id.txtFileName); holder.txtisActive = (TextView) convertView .findViewById(R.id.txtIsActive); holder.txtFileName.setText(fileName); convertView.setTag(holder); 
  • Haga que las pestañas de ActionBar se desplacen cuando alcance límite, en lugar de crear una lista desplegable
  • Desplazamiento bidireccional para Android
  • Soluciones para GridView.scrollTo ()?
  • La vista web de Android no tratará los eventos correctamente cuando el iframe esté presente
  • Iniciar una animación onstart CustomViewPager
  • Uso de JavaScript para desplazarse automáticamente en la tableta de galaxias
  • ¿Cómo desplazar la vista web horizontalmente dentro de ViewPager?
  • ¿Hay alguna manera de saber cuántos elementos están mostrando en una vista de lista?
  • Sincronizar la posición de dos vistas ScrollView
  • Vista de cuadrícula de desplazamiento horizontal
  • Barra de desplazamiento en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.