Tôi có một ListView được lấp đầy bởi Bộ điều hợp tùy chỉnh với Bố cục cụ thể. Bộ điều hợp được ánh xạ tới một HashMap với các phần tử cụ thể có chứa dữ liệu cho từng phần tử ListView.Tại sao ListView lặp lại mọi mục thứ 6?
Dữ liệu trong HashMap là chính xác, nhưng ListView lặp lại để vẽ mỗi 6'th các yếu tố 6'th lần nữa, cho đến khi nó đạt đến cuối Bản đồ ??
Hiển thị của tôi cho phép hiển thị 5 mục, nếu bạn đăng ký một litte là 6 mục.
Đây là Mã bộ điều hợp, Mã có liên quan của ListActivity và tệp bố cục của ListView.
Xin vui lòng trợ giúp, tôi không có ý tưởng tại sao điều này xảy ra.
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>
Cảm ơn eldarerathis, tôi đã phát hiện ra cái đó. Nhưng có một số khác lạ behalviour. Tôi bắt các convertView với một số nếu mệnh đề khác, sử dụng một viewholder vv .. bây giờ ListView của tôi có vẻ đúng. – divadroit
@divadroit: bạn có thể viết mã mà bạn đã được thêm vào để giải quyết vấn đề này không? – user1553381
giải thích tốt sẽ là tốt để xem một số hỗ trợ mã – Sam