ListView显示相同行的5倍

时间:2018-01-15 15:18:45

标签: android sqlite listview

我为我的ListView创建了一个适配器,它显示了我的SQLite数据库中的数据,问题是在ListView中,我有5次相同的行: 我的适配器代码:

public class MyAdapter extends ArrayAdapter<Historique> {
    private LayoutInflater mInflat;
    private ArrayList<Historique> hist = new ArrayList<Historique>();
    private int mVRessId;


    public MyAdapter (Context context, int ressId, ArrayList<Historique> hists){

        super(context,ressId,hists);
        this.hist =hists;
        mInflat = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mVRessId =ressId;
    }

    public View getView(int position, View convertedView, ViewGroup parents){
        convertedView = mInflat.inflate(mVRessId,null);

        Historique histor = hist.get(position);



        if (histor != null){
            TextView name = (TextView) convertedView.findViewById(R.id.hnom);
            TextView quest = (TextView) convertedView.findViewById(R.id.hques);
            TextView rep = (TextView) convertedView.findViewById(R.id.hrep);
            TextView date = (TextView) convertedView.findViewById(R.id.hdate);

            if (name != null){
                name.setText(""+histor.getNom()+ ": "+histor.getLigne());
            }
            if (quest != null){
                quest.setText(histor.getQuest());
            }
            if (rep != null){
                rep.setText(histor.getRep());
            }
            if (date != null){
                date.setText(histor.getDate().toString());
            }
        }
        return convertedView;
    }
}

ListView必须显示列表,这里是代码:

final MyAdapter adapter =  new MyAdapter (this, R.layout.adapter_view_layout,histList);





mCsr = openhelper.getTableHistoAsCursor();
int rows = mCsr.getCount();
if (rows == 0 ){
    Toast.makeText(Historian.this, "Pas d'historique disponible", Toast.LENGTH_SHORT).show();
} else {
    while (mCsr.moveToNext()){

        histo = new Historique(mCsr.getString(0).toString(),mCsr.getString(1).toString(), mCsr.getString(2).toString(),mCsr.getString(3).toString(),mCsr.getString(4).toString());
        histList.add(histo);

   }


}
mListView .setAdapter(adapter);

getTableHisto是一个从我的SQLite Modelhelper返回游标的函数:

public Cursor getTableHistoAsCursor() {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor data = db.rawQuery(" SELECT Q." + KEY_QUESTION + " ,L." + KEY_LIGNE + " , U." + KEY_NOM + " , A." + KEY_DATE + " , A. " + KEY_REPONSE + " from "+ TABLE_LIGNE + " L, " + TABLE_QUESTION + " Q, " + TABLE_USER + " U, " + TABLE_ANSWER + " A WHERE Q." + KEY_ID_QUESTION + " = A." + KEY_ID_QUESTION + " AND A." + KEY_MATRICULE + " = U." + KEY_MATRICULE, null);
        return data;
    }

第一次,我认为在插入中我做错了,它在数据库中出现了5次,所以我创建了一个活动来尝试使用Select count()来获取插入数量; 我看到我得到的结果是真实结果,我没有插入相同行的5次,但适配器在5行中显示5次。 如果您有任何想法可以帮助我,我会很感激。 感谢。

2 个答案:

答案 0 :(得分:0)

我明白了,问题解决了,如果有人有同样的问题,循环不好,所以我改了

display:none

通过

else {
    while (mCsr.moveToNext()){

答案 1 :(得分:0)

//Initialize my adapter after populating the list

histList.add(histo);

仅在填充数组列表中的值后初始化适配器 没有空值。

final MyAdapter adapter =  new MyAdapter (this, R.layout.adapter_view_layout,histList);    
mListView .setAdapter(adapter);