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


Entradas duplicadas en ListView

Consigo los artículos duplicados en un ListView. Desplazarse hacia atrás y hacia abajo a veces cambia el orden de los elementos. Busqué en Google y encontré muchos hilos reportando este error, pero ninguno de ellos me ayudó a solucionar mi problema.

Aquí está mi código:

  • La conexión de Cordova al servidor no tuvo éxito
  • Detección de NFC en dispositivos Android
  • Comunicación entre Android Java y Phonegap Javascript?
  • Las versiones resueltas para la aplicación (22.0.0) y la aplicación de prueba (21.0.3) difieren
  • IllegalStateException cuando se utiliza DialogFragment
  • GetChildFragmentManager () y bibliotecas de soporte
  • Actividad:

    package com.github.progval.SeenDroid; import java.util.ArrayList; import java.util.List; import com.github.progval.SeenDroid.lib.Connection; import com.github.progval.SeenDroid.lib.Message; import com.github.progval.SeenDroid.lib.MessageFetcher; import com.github.progval.SeenDroid.lib.Query.ParserException; import android.app.Activity; import android.app.ListActivity; import android.content.SharedPreferences; import android.os.Bundle; public class ShowUserActivity extends ListActivity { private Connection connection; public ArrayList<Message> listMessages = new ArrayList<Message>(); public MessageAdapter adapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.profile); this.connection = new Connection(); this.setTitle(R.string.homefeed_title); this.listMessages = new MessageFetcher(this.connection).fetchUser(); this.bindUi(); } private void bindUi() { this.adapter = new MessageAdapter(this, this.listMessages); this.setListAdapter(adapter); // TODO Bind buttons } } 

    MessageAdapter:

     package com.github.progval.SeenDroid; import java.util.ArrayList; import java.util.List; import java.util.zip.Inflater; import com.github.progval.SeenDroid.lib.Message; import android.content.Context; import android.text.Layout; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; public class MessageAdapter extends BaseAdapter { private Context context; private List<Message> items = new ArrayList<Message>(); private int lastPosition = 0; public MessageAdapter(Context context, List<Message> items) { super(); this.context = context; this.items = items; } public View getView(int position, View convertView, ViewGroup parent) { if (null == convertView) { LinearLayout view; view = (LinearLayout) LinearLayout.inflate(this.context, R.layout.message, null); Log.d("SeenDroid", String.format("Get view %d", position)); TextView title = new TextView(view.getContext()); title.setText(this.items.get(position).getTitle()); view.addView(title); return view; } else { return convertView; } } @Override public int getCount() { return this.items.size(); } @Override public Object getItem(int location) { return this.items.get(location); } @Override public long getItemId(int arg0) { return arg0; } } 

    Por cierto, la salida es:

     D/SeenDroid(30939): Get view 0 D/SeenDroid(30939): Get view 1 D/SeenDroid(30939): Get view 2 D/SeenDroid(30939): Get view 3 D/SeenDroid(30939): Get view 4 D/SeenDroid(30939): Get view 5 D/SeenDroid(30939): Get view 6 D/SeenDroid(30939): Get view 7 D/SeenDroid(30939): Get view 8 D/SeenDroid(30939): Get view 0 D/SeenDroid(30939): Get view 16 

    Saludos, ProgVal

  • Adaptador de ventana de información personalizada con datos personalizados en el mapa v2
  • No se puede obtener la ubicación y el correo electrónico mediante la API de Facebook
  • Android obtiene la tasa de carga en milliamps a través de sysfs
  • ¿Cómo puedo crear una actividad transparente en Android?
  • ¿Cómo establecer el detector de clics para la notificación?
  • El desplazamiento no funciona con CoordinatorLayout + imagen de paralaje + BottomSheetLayout
  • 5 Solutions collect form web for “Entradas duplicadas en ListView”

    Prueba esto:

     public View getView(int position, View convertView, ViewGroup parent) { if (null == convertView) { LinearLayout view = (LinearLayout) LinearLayout.inflate(this.context, R.layout.message, null); Log.d("SeenDroid", String.format("Get view %d", position)); TextView title = new TextView(view.getContext()); title.setText(this.items.get(position).getTitle()); view.addView(title); return view; } else { LinearLayout view = (LinearLayout) convertView; TextView title = (TextView) view.getChildAt(0); title.setText(this.items.get(position).getTitle()); return convertView; } } 

    Explicación : obtuvo los duplicados porque las listas de los objetos de la interfaz de usuario de reutilización de Android. Se espera que reutilice convertView lugar de crear uno nuevo si no es nulo. Por supuesto, usted es responsable de establecer un valor apropiado para la instancia que se está reutilizando. De lo contrario el valor se deja de la última "utilización".

     public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); } else { gridView = (View) convertView; } gridView = inflater.inflate(R.layout.worker_listmain, null); // your source code here!!! Run 100% // I got this problem also, I found out the way to solve it! // Please use my source code :D SIMPLE is PERFECT :D return gridView; } 

    ListView no garantiza la unicidad de los elementos que se agregan allí. Es su responsabilidad. Está utilizando ArrayList para almacenar elementos y puede almacenar tantos elementos duplicados como desee.

    Si desea eliminar los duplicados poner sus elementos en el conjunto y luego en la lista de nuevo:

    listMessages = new ArrayList<Messages>(new LinkedHashSet<Message>(listMessages))

    El LinkedHashSet eliminará los duplicados preservando el orden inicial de los elementos, ArrayList permitirá elementos de acceso por posición.

    Una sugerencia: agregue una sentencia de registro después de title.setText y escriba el valor obtenido de getTitle (). Usted puede ser que consiga saber porqué usted está consiguiendo entradas duplicadas.

    Debe utilizar el paradigma ViewHolder en su ListAdapter

    Un buen ejemplo se puede encontrar aquí: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.