gpt4 book ai didi

android - 为什么 ListView 每 6 个项目重复一次?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:52 25 4
gpt4 key购买 nike

我有一个 ListView,它由具有特定布局的自定义适配器填充。适配器映射到具有特定元素的 HashMap,其中包含每个 ListView 元素的数据。

hashMap 中的数据是正确的,但是 ListView 重复绘制每 6 个相同的第 6 个元素,直到它到达 Map 的末尾??

My Display 允许显示 5 个项目,如果你滚动一点它是 6 个项目。

这里是Adapter的代码,ListActivity的相关代码和ListView的布局文件。

请帮忙,我不知道为什么会这样。

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>

最佳答案

@Override
public View getView(int pos, View convertView, ViewGroup parent) {

if(convertView == null){
convertView = mLayoutInflater.inflate(zeilen_Layout, null);

//Assignment code
}
return convertView;
}

发生这种情况的原因是您如何定义此方法(即 getView())。如果 convertView 对象为 null,它只会修改它,但在项目的第一页被填充后,Android 将开始回收 View 对象。这意味着传入的第七个 不是 null - 它是之前滚动到屏幕顶部的对象(第一个项目)。

条件导致您只返回传递给方法的内容,因此它似乎一遍又一遍地重复相同的 6 个项目。

关于android - 为什么 ListView 每 6 个项目重复一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6470089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com