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:

  • ByteBuffer Little Endian insert no funciona
  • ¿Cómo puedo interceptar pulsaciones de botón en el auricular en Android?
  • Añadir javascript a WebView
  • Múltiples hiladoras y onItemSelected
  • Cómo obtener JSON de objeto RetrofitError utilizando Retrofit
  • ¿Dónde puedo obtener una lista de los permisos de Android
  • 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

  • ¿Cómo subraya un texto en android xml?
  • Ignore OnItemSelectedListener encendiendo en crear
  • ¿Es posible usar subcarpetas en drawables en Android?
  • Cerrar todas las aplicaciones abiertas y ejecutables a la vez botón-android
  • Maven se niega a descargar una dependencia empacada desde un repositorio remoto
  • Carpeta añadida en android no visible a través de USB
  • 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.