我編寫了我自己的ListView BaseAdapter。我有一個ArrayList與23個主題。前七個來自實例遊戲,而另外16個來自實例表。但是如果我運行ListView,我只能得到前七項。如果我不重用convertview(... if(convertview == null || true){...)我得到每23項。有沒有問題時沒有reuising項目?Android ListView - ArrayList只有23個使用了7個項目 - 爲什麼?
package k0f.de.americanfootball;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by benjaminbecker on 26.02.16.
*/
public class AmericanFootballAdapter extends BaseAdapter {
private final LayoutInflater inflator;
private ArrayList<Object> arrayList = new ArrayList<Object>();
public AmericanFootballAdapter(Context context) {
inflator = LayoutInflater.from(context);
}
public void setNewDataGames(ArrayList<Object> arrayList){
this.arrayList=arrayList;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
Context context = parent.getContext();
// falls nötig, convertView bauen
// Holder bereits vorhanden
if (convertView == null) {
// Layoutdatei entfalten
if((position%2)==0){
convertView = inflator.inflate(R.layout.listitem_game, parent,
false);
}else{
convertView = inflator.inflate(R.layout.listitem_table, parent,
false);
}
// Holder erzeugen
holder = new ViewHolder();
Object ob = getItem(position);
if(ob instanceof AmericanFootballDataGames){
holder = holderGames(holder, convertView, context, (AmericanFootballDataGames) ob);
convertView.setTag(holder);
}
if(ob instanceof AmericanFootballDataTable){
holder = holderTable(holder, convertView, context, (AmericanFootballDataTable) ob);
convertView.setTag(holder);
}
} else {
Log.v("Ben","HolderGame");
holder = (ViewHolder) convertView.getTag();
convertView.setTag(holder);
} /*else {
Log.v("Ben","HolderTable");
holderG = (ViewHolderGame) convertView.getTag();
convertView.setTag(holderG);
}
*/
return convertView;
}
static class ViewHolder {
TextView tv1, tv2, tv3;
}
private ViewHolder holderGames(ViewHolder holder, View convertView, Context context, AmericanFootballDataGames afdg){
String erg = afdg.getTdheim() + " : " +
afdg.getTdgast() + " (" +
afdg.getQ1heim() + " : " +
afdg.getQ1gast() + " , " +
afdg.getQ2heim() + " : " +
afdg.getQ2gast() + " , " +
afdg.getQ3heim() + " : " +
afdg.getQ3gast() + " , " +
afdg.getQ4heim() + " : " +
afdg.getQ4gast() + ")";
holder.tv2 = (TextView) convertView.findViewById(R.id.game);
holder.tv3 = (TextView) convertView.findViewById(R.id.erg);
holder.tv1 = (TextView) convertView.findViewById(R.id.date);
holder.tv1.setText(afdg.getAnstoss()+System.getProperty("line.separator")+afdg.getDatum());
holder.tv2.setText(afdg.getHeim() + System.getProperty("line.separator") + afdg.getGast());
holder.tv3.setText(erg);
if(afdg.getTdheim().toString()=="?") {
holder.tv3.setTextColor(ContextCompat.getColor(context, R.color.colorListHalfLight));
}else{
holder.tv3.setTextAppearance(context, android.R.style.TextAppearance_Medium);
holder.tv3.setTextColor(ContextCompat.getColor(context, R.color.colorListHalfDark));
}
return holder;
}
private ViewHolder holderTable(ViewHolder holder, View convertView, Context context, AmericanFootballDataTable afdt){
holder.tv2 = (TextView) convertView.findViewById(R.id.game);
holder.tv3 = (TextView) convertView.findViewById(R.id.erg);
holder.tv1 = (TextView) convertView.findViewById(R.id.date);
holder.tv1.setText(Integer.toString(afdt.getPlatz()));
holder.tv2.setText(afdt.getMannschaft());
holder.tv3.setText(afdt.getPplus()+" "+afdt.getPminus());
return holder;
}
}
這是有和沒有表格數據的屏幕。
謝謝你的回答。是的,嘗試了這一點,並忘記刪除線。如果沒有這個參數,ArrayList中的所有對象都不會顯示出來。 – baeckerman83