Android:Listview只显示一个结果/一行

时间:2011-11-14 01:53:24

标签: android sqlite listview android-arrayadapter

我有问题从数据库填充数据到listview。哪个是我的数据库有超过1行,但在列表视图中只显示1个结果,这是我保存的第一个数据。现在我们将跳过保存功能并直接转到适配器的代码。例如,我有一个按钮,充当刷新按钮。点击该按钮,它将执行以下代码行;

    button.setOnClickListener(new OnClickListener(){
          public void onClick(View v){
              refreshAdapter();
          }
    });

    public void refreshAdapter(){
         SQLiteDatabase db=null;
         String path=DBPATH+DBNAME;

         db=SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
         Cursor resultset = db.query("Event_Log", null, null, null, null, null,   null);

        if(resultset.getCount()>0){
           resultset.moveToFirst();             
           List<String> arl = new ArrayList<String>();              
           while(resultset.isAfterLast()==false){

              arl.add(resultset.getString(6).toString() + "\n" +  resultset.getString(3).toString() 
                                + " " + resultset.getString(4).toString() 
                                + "@@" + resultset.getString(1).toString());                    
                        resultset.moveToNext();                         
                    }               
             Toast.makeText(refView.getContext(), "arl size " + arl.size() + " arl value " + arl, Toast.LENGTH_LONG).show();
             lView = (ListView) findViewById(R.id.personList);
             lView.setAdapter(new PersonAdapter(getApplicationContext(), arl));
    }
}

这是我的适配器

import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.ImageView;

public class PersonAdapter extends ArrayAdapter<String>{
    private final Context context;
    private final List<String> list;
    private TextView descHolder;
    private ImageView typeHolder; 

    public PersonAdapter(Context c, List<String> list){
        super(c, R.layout.person_adapter, list);
        this.context = c;
        this.list = list;                               
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    public View getView(int position, View convertview, ViewGroup group){               
            if(convertview==null){
                LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertview = inf.inflate(R.layout.person_adapter, null);
                descHolder = (TextView) convertview.findViewById(R.id.personDescLbl);
                typeHolder = (ImageView) convertview.findViewById(R.id.presonCategoryImage);
            }           

            String[]  textSplit = list.get(position).toString().split("@@");
            descHolder.setText(textSplit[0]);
            if(position%2==0){
                descHolder.setBackgroundColor(Color.parseColor("#badce8"));
            }else{
                descHolder.setBackgroundColor(Color.parseColor("#f7f7f7"));
            }

            String category = textSplit[1];                     
            if(category.equals("Male")){
                typeHolder.setImageResource(R.drawable.maleicon);
            }else{
                typeHolder.setImageResource(R.drawable.female_icon);
            }                   
        return convertview;
    }
}

我的person_adapter布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <TextView 
        android:id="@+id/personDescLbl"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:textColor="#000000"
        android:textSize="20dp"/>
     <ImageView 
        android:id="@+id/personCategoryImage"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>          
</LinearLayout>

按下按钮我也放了Toast功能并显示arraylist的值/大小,它像db一样干净确切的值,只在适配器中显示我保存的第一个数据。请指导我。

2 个答案:

答案 0 :(得分:0)

我不确定你的代码是否还有问题,但这里有一个很大的问题:在你的getView中,如果convertView为null,则descHolder和typeHolder将只有正确的值。以下是使用ViewHolder模式的getView应该是什么样子(未经测试):

public View getView(int position, View convertview, ViewGroup group){               
        ViewHolder vh;

        if(convertview==null){
            LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertview = inf.inflate(R.layout.person_adapter, null);
            vh = new ViewHolder();
            vh.descHolder = (TextView) convertview.findViewById(R.id.personDescLbl);
            vh.typeHolder = (ImageView) convertview.findViewById(R.id.presonCategoryImage);
            convertview.setTag(vh);
        } else {
            vh = (ViewHolder)convertview.getTag();
        }

        String[] textSplit = list.get(position).toString().split("@@");
        vh.descHolder.setText(textSplit[0]);
        if(position%2==0){
            vh.descHolder.setBackgroundColor(Color.parseColor("#badce8"));
        }else{
            vh.descHolder.setBackgroundColor(Color.parseColor("#f7f7f7"));
        }

        String category = textSplit[1];                     
        if(category.equals("Male")){
            vh.typeHolder.setImageResource(R.drawable.maleicon);
        }else{
            vh.typeHolder.setImageResource(R.drawable.female_icon);
        }                   
    return convertview;
}

其中ViewHolder只是适配器的内部类:

class ViewHolder {
    public TextView descHolder;
    public ImageView typeHolder;
}

我还没有检查过您的代码是否存在其他问题,但这应该为您提供一个起点。

答案 1 :(得分:0)

检查您的列表大小是否超过一个以及您在视图中获得的列表值。