我有问题从数据库填充数据到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一样干净确切的值,只在适配器中显示我保存的第一个数据。请指导我。
答案 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)
检查您的列表大小是否超过一个以及您在视图中获得的列表值。