Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Chris Banes PullToRefreshListView con el error del adaptador personalizado

Estoy configurando un ListView personalizado.

La función pull-to-refresh viene directamente de https://github.com/chrisbanes/Android-PullToRefresh

El ListView muestra imágenes, por lo que creé un adaptador personalizado:

class mAdapter extends BaseAdapter{ public mAdapter(Context context){ // nothing to do } @Override public int getCount() { return mValues.size(); } @Override public Object getItem(int position) { return mValues.get(position); } @Override public long getItemId(int position) { return position; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if(v == null){ LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(R.layout.list_item, null); } ImageView iv = (ImageView) v.findViewById(R.id.imageView); if(iv != null){ displayImageInView(iv); iv.setClickable(true); iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "ImageView", Toast.LENGTH_SHORT).show(); } }); } return v; } } 

En onCreate (), obtengo el listView y asignar el adaptador:

 mListView = (PullToRefreshListView) findViewById(R.id.listView); mListView.setAdapter(new mAdapter(context)); 

Después de eso agrego una imagen a mValues ​​(url para que la imagen se cargue desde la web) y llame a notifiyDataSetChanged al adaptador.

En mListView.onRefresh (), agrego una imagen a mValues.

Esto funciona sin problemas para agregar la primera imagen, o incluso el primer manojo de imágenes (antes de llamar a mAdapter.notifyDataSetChanged ()). El indicador de actualización muestra y se esconde según lo previsto.

Las cosas extrañas empiezan a suceder cuando intento agregar otra imagen (o montón) después de eso.

El indicador de actualización muestra, la imagen se muestra en la vista de lista.

PERO: el indicador de actualización nunca se oculta de nuevo después de eso. "OnRefreshComplete ()" se llama, pero parece no funcionar correctamente la segunda vez.

El hilo de interfaz de usuario no bloquea, por lo que la operación todavía es posible. Si elimino todos los elementos en mValues, notificar al adaptador y jalar para actualizar de nuevo, la imagen se agrega correctamente y el indicador de actualización se oculta correctamente.

Conclusión: El pull-to-refresh sólo se oculta correctamente si la lista estaba vacía antes de la actualización.

Realmente no sé dónde buscar una solución para este error extraño.

Tal vez alguien familiarizado con la Biblioteca de Pull-To-Refresh de Chirs Banes me puede ayudar aquí.

Gracias !

2 Solutions collect form web for “Chris Banes PullToRefreshListView con el error del adaptador personalizado”

Lo acabo de averiguar a mí mismo.

Para cualquier persona interesada:

Debe establecer onRefreshComplete desde el subproceso de interfaz de usuario. Utilice un manejador para .poste desde dentro onRefresh (). <- que por cierto se ejecuta en un hilo separado.

Que tengas un buen día.

He encontrado 2 maneras:

  1. De forma dinámica, cuando necesite pulltorefreshview para detener la tarea en pull up, puede establecer una AsyncTask personalizada, por ejemplo:

     private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected String[] doInBackground(Void... params) { return null; } @Override protected void onPostExecute(String[] result) { lv.onRefreshComplete(); showToast(getResources().getString(R.string.no_more)); super.onPostExecute(result); } } 
  2. Llamar dinámicamente setMode al pulltorefreshView

     ptrlv.setMode(Mode.Both); // both direction can be used ptrlv.setMpde(Mode.PULL_FROM_START); // only pull down can be used. 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.