Tengo un ListView que se llena con un Adaptador personalizado con un Diseño específico. El Adaptador se asigna a un HashMap con los Elementos específicos que contienen los Datos para cada Elemento ListView.¿Por qué el ListView repitió cada 6to artículo?
Los datos en hashMap son correctos, pero el ListView se repite para dibujar cada 6'to los mismos elementos 6'th nuevamente, hasta que llega al final del mapa?
Mi pantalla le permite mostrar 5 elementos, si arrastra un litte son 6 elementos.
Aquí está el Código del Adaptador, el Código relevante de ListActivity y el archivo de diseño del ListView.
Por favor, ayuda, no tengo idea de por qué sucede esto.
package de.View;
import java.util.ArrayList;
import java.util.Map;
import de.carSync.R;
import de.Common.Date_Conversion;
import de.Common.GUI_Output;
import de.Model.DriversLog.Fahrt;
import de.Model.DriversLog.Geladene_Fahrten;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class Fahrten_List_Adapter extends BaseAdapter{
private static String TAG = "Fahrten_List_Adapter";
private Map<Integer,Fahrt> fahrten_Liste;
private final LayoutInflater mLayoutInflater;
int zeilen_Layout;
public Fahrten_List_Adapter(Context ctx, Map<Integer,Fahrt> f_l, int zeilen_Layout){
this.zeilen_Layout = zeilen_Layout;
fahrten_Liste = f_l;
mLayoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return fahrten_Liste.size();
}
@Override
public Object getItem(int pos) {
return fahrten_Liste.get(pos);
}
@Override
public long getItemId(int pos) {
return 0;
}
public void clear(){
fahrten_Liste.clear();
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = mLayoutInflater.inflate(zeilen_Layout, null);
Log.v(TAG,"getView :" + pos);
((TextView) convertView.findViewById(R.id.FahrtID)).setText((String) ((Fahrt) getItem(pos)).get_Fahrt_ID());
((TextView) convertView.findViewById(R.id.Kennzeichen)).setText((String) ((Fahrt) getItem(pos)).get_Kennzeichen());
((TextView) convertView.findViewById(R.id.Abfahrts_Strasse)).setText((String) ((Fahrt) getItem(pos)).get_Abfahrts_Strasse().toString());
((TextView) convertView.findViewById(R.id.Ankunfts_Strasse)).setText((String) ((Fahrt) getItem(pos)).get_Ankunfts_Strasse().toString());
((TextView) convertView.findViewById(R.id.Fahrttyp)).setText((String) GUI_Output.get_Fahrttyp((Object) ((Fahrt) getItem(pos)).get_Fahrttyp()));
((TextView) convertView.findViewById(R.id.Abfahrts_Stadt)).setText((String) ((Fahrt) getItem(pos)).get_Abfahrts_Stadt().toString());
((TextView) convertView.findViewById(R.id.Ankunfts_Stadt)).setText((String) ((Fahrt) getItem(pos)).get_Ankunfts_Stadt().toString());
((TextView) convertView.findViewById(R.id.Dauer)).setText((String) ((Fahrt) getItem(pos)).get_Fahrt_Dauer().toString());
((TextView) convertView.findViewById(R.id.Abfahrts_Zeit2)).setText((String) Date_Conversion.get_GUI_Date( ((Fahrt) getItem(pos)).get_Abfahrtszeit_Date()));
((TextView) convertView.findViewById(R.id.Ankunfts_Zeit2)).setText((String) Date_Conversion.get_GUI_Date( ((Fahrt) getItem(pos)).get_Ankunftszeit_Date()));
((TextView) convertView.findViewById(R.id.Entfernung)).setText((String) ((Fahrt) getItem(pos)).get_Fahrt_Entferung().toString());
((TextView) convertView.findViewById(R.id.Abfahrts_Km)).setText((String) ((Fahrt) getItem(pos)).get_Abfahrt_km().toString());
((TextView) convertView.findViewById(R.id.Ankunfts_Km)).setText((String) ((Fahrt) getItem(pos)).get_Ankunfts_km().toString());
//}
}
return convertView;
}
}
package de.View;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.Stack;
import org.json.JSONException;
import de.carSync.R;
import de.Controler.Drivers_Log_Controller;
import de.Controler.Global_Controller;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class Drivers_Log_View extends ListActivity implements AbsListView.OnScrollListener {
Drivers_Log_Controller d_l_c;
Fahrten_List_Adapter f_l_a_ohne_Auswahl;
ListView view_ohne_auswahl;
static String TAG = "Drivers_Log_View";
/** Called when the activity is first created. */
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.d_l_c = (Drivers_Log_Controller) Global_Controller.get_Controller_Map().get("actual d_l_c");
this.setContentView(R.layout.list_view);
try {
d_l_c.lade_Standard_Fahrten(null);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v(TAG, "now creating Fahrten_List_Adapter");
f_l_a_ohne_Auswahl = new Fahrten_List_Adapter(this, d_l_c.get_Fahrten(), R.layout.fahrt_linear_ohne_auswahl);
this.setListAdapter(f_l_a_ohne_Auswahl);
d_l_c.listAdapter = this.getListAdapter();
ListView lv = this.getListView();
lv.setOnScrollListener(this);
//addListeners();
}
public void init() {
//
}
public Drivers_Log_Controller get_D_L_C() {
return this.d_l_c;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.fahrtenbuch_menue_bar, menu);
Log.v(TAG, "Do I get here");
return true;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Log.v(TAG, "ListView Position :" + position);
super.onListItemClick(l, v, position, id);
Global_Controller.start_Fahrt(position);
}
@SuppressWarnings("unchecked")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.fahrtenbuch: {
try {
d_l_c.lade_Standard_Fahrten(null);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setListAdapter(d_l_c.get_List_Adapter());
}
break;
case R.id.unv_Fahrten: {
try {
d_l_c.lade_Unvollstaendige_Fahrten(null);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setListAdapter(d_l_c.get_List_Adapter());
}
break;
case R.id.filter: {
Global_Controller.start_Filter();
break;
}
case R.id.zusammenfassen: {
Log.v(TAG, "Menu --- Zusammenfassen");
Global_Controller.start_Zusammenfassen();
}
break;
}
return true;
}
@Override
public void onScroll(AbsListView arg0, int firstVisible, int visibleCount,
int totalCount) {
Log.v(TAG, "firstVisible :" + firstVisible);
Log.v(TAG, "visibleCount :" + visibleCount);
Log.v(TAG, "totalCount :" + totalCount);
boolean endReached = firstVisible + visibleCount >= totalCount;
if (endReached) {
try {
Log.v(TAG, "EndReached");
d_l_c.nachladen_Fahrten(totalCount);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onResume() {
super.onResume();
this.setListAdapter(d_l_c.get_List_Adapter());
Log.v(TAG, "OnResume");
}
}
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:divider="#000000" android:dividerHeight="3px" android:cacheColorHint="#FFFFFF" />
<TextView android:id="@android:id/empty" android:text="nix da...." android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:divider="#000000" android:dividerHeight="3px" android:cacheColorHint="#FFFFFF" />
</LinearLayout>
, gracias eldarerathis, ya descubrí ese. Pero hay algún otro comportamiento extraño. Cojo el convertView con alguna cláusula if else, uso un visor, etc. Ahora mi ListView se ve bien. – divadroit
@divadroit: ¿podría escribir el código que le han agregado para resolver este problema, por favor? – user1553381
buena explicación estaría bien para ver algún tipo de soporte de código – Sam