0

写真にリストする独自のアダプターとListView、自分の連絡先の名前を持っていSQLiteます。私はListActivityそれが私の を呼び出していますArrayAdapterが、それは を呼び出さず、getView理由がわかりません。そして、setListAdapterは空だと思います。

ここからサンプルを取得します。これが私のコードです:

public class ListarContactos3 extends ListActivity {
private SQLiteDatabase database;
private ListAdapter dataSource;
private static final String fields[] = {"Nombre_Amigo","Picture","_id"};
Bitmap photo;
Cursor cur;
Context context;
private LayoutInflater mInflater;
View view;
ViewGroup parent;

public void onCreate(Bundle icicle){
    super.onCreate(icicle);
    DatabaseHandler helper = new DatabaseHandler(this);
    database = helper.getWritableDatabase();

    cur = helper.getAllContactList();
    Log.d("ListarContactos3","Cursor :"+cur);

    setListAdapter(new MyPerformanceArrayAdapter(this, cur));
    Log.d("ListarContactos3","setListAdapter");
}
 }    

これは私のアダプターです:

public class MyPerformanceArrayAdapter extends ArrayAdapter<String> {
 private final Activity context;
 private Cursor cursor;

static class ViewHolder {
 public TextView text;
 public ImageView image;
}

public MyPerformanceArrayAdapter(Activity context,Cursor cursor){
 super(context, R.layout.row_def);
 this.context = context;
 this.cursor = cursor;
 Log.d("MyPerformanceArrayAdapter","Constructor");
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  Log.d("MyPerformanceArrayAdapter","View");
 View rowView = convertView;
 if (rowView == null) {
   LayoutInflater inflater = context.getLayoutInflater();
   rowView = inflater.inflate(R.layout.row_def, null);
   ViewHolder viewHolder = new ViewHolder();
   viewHolder.text = (TextView) rowView.findViewById(R.id.Nombre_Amigo);
   viewHolder.image = (ImageView) rowView
      .findViewById(R.id.profile_picture);
   rowView.setTag(viewHolder);
 }

 ViewHolder holder = (ViewHolder) rowView.getTag();
 for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){

    byte[] bb2= cursor.getBlob(4);
    Bitmap bitmap = BitmapFactory.decodeByteArray(bb2, 0, bb2.length); 
    Log.d("MyPerformanceArrayAdapter","Bitmap: "+bitmap);

    holder.image.setImageBitmap(bitmap);
    holder.text.setText(cursor.getString(2));
    rowView.setTag(holder);
}

return rowView;
}

}

そして、これはデータベースの私の方法です:

   public Cursor getAllContactList(){

    String selectQuery = "SELECT  * FROM " + TABLE_AMIGOS;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);


            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
            Contact contact = new Contact();

            byte[] blob = cursor.getBlob(cursor.getColumnIndex(KEY_PIC_SQ));
            Log.d("DatabaseHandler","blob: "+blob);
            Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);
            Log.d("DatabaseHandler","blob: "+bmp);
            contact.setPicSquare(bmp);
            contact.setID(cursor.getString(0));
            contact.setName(cursor.getString(2));
            Log.d("DatabaseHandler","setname: "+cursor.getString(2));
         }

        db.close();           
    return cursor;
}

誰かが私を助けてくれますか?連絡先リストを表示する方法がわかりません。これは重要です。ありがとう。

4

1 に答える 1

0

アダプタの getView が間違っているようです。呼び出されるたびにカーソル全体を反復処理しているようです。

アダプターは、ArrayAdapter の代わりに SimpleCursorAdapter を拡張する必要があります。これは、データベースから ListView を生成するときに使用されます。例については、この投稿を参照してください。

そのブログには、CursorAdapters の実装に関するシリーズがあります。リストはこちらからご覧いただけます

于 2012-08-21T12:04:19.470 に答える