2

データベースから text(title) を照会し、TextView に表示しますが、表示するときは順番どおりではありませんが、タイトルが 1 つだけ表示され、そのタイトルはタイトル列の最後のインデックスにあります。

すべてを表示して最初から最後に並べるにはどうすればよいですか?

イメージアダプター

public class ImageAdapter extends BaseAdapter {

    private ArrayList<HashMap<String, String>> MyArr = new ArrayList<HashMap<String,String>>();
    Cursor cursor = dataSource.database.rawQuery("SELECT * FROM "+CafeDbOpenHelper.TABLE_CAFE, null);

    public ImageAdapter(Context c){
        context = c;
    }
    @Override
    public int getCount() {
        return cursor.getCount();           
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View converView, ViewGroup parent) {
        ViewHolder viewHolder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if(converView == null){
            converView = inflater.inflate(R.layout.grid_item, null);
        }
        viewHolder.imageview = (ImageView) converView.findViewById(R.id.imv_card_cafe);
        viewHolder.txtTitle = (TextView) converView.findViewById(R.id.txt_title);


        while (cursor.moveToNext()) {
            Log.i("db", " return "+cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
                viewHolder.txtTitle.setText(cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
        }


        String imagePath = Environment.getExternalStorageDirectory().toString()+"/downloadedfile.png";   
        viewHolder.imageview.setImageResource(mThumb[position]);

        return converView;
    }
}

Logcat db タグは、データベースからのテキストです

03-04 14:44:00.411: D/AbsListView(22842): Get MotionRecognitionManager
03-04 14:44:00.426: I/ACTION(22842): Database is open
03-04 14:44:00.442: I/number(22842): return11 rows
03-04 14:44:00.450: I/ACTION(22842): Database is open
03-04 14:44:00.504: I/db(22842):  return Kiriya Café
03-04 14:44:00.504: I/db(22842):  return Brown Coffee and Bakery
03-04 14:44:00.504: I/db(22842):  return The Blue Pumpkin - Riverside
03-04 14:44:00.504: I/db(22842):  return Black Canyon Coffee
03-04 14:44:00.559: D/libEGL(22842): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
03-04 14:44:00.575: D/libEGL(22842): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
03-04 14:44:00.575: D/libEGL(22842): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
03-04 14:44:00.684: D/OpenGLRenderer(22842): Enabling debug mode 0
03-04 14:45:35.348: I/ACTION(22842): Database is close

画像

ここに画像の説明を入力

4

1 に答える 1

0

タイトルの順序に関しては、選択クエリを変更して、既に並べ替えられた行を取得することができます。

"SELECT * FROM "+CafeDbOpenHelper.TABLE_CAFE + " ORDER BY YOUR_COLUMN_TITLE", null

単一のテキストビューのみが表示されている理由については、ロジックの記述方法に関係しています。

viewHolder.txtTitle = (TextView) converView.findViewById(R.id.txt_title);


while (cursor.moveToNext()) {
      Log.i("db", " return "+cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
      viewHolder.txtTitle.setText(cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
}

基本的に、同じテキストビューをそのループで 4 回変更しているため、データベースから最後に取得したテキストビューに自然に設定されます (たまたまブラック キャニオン コーヒー)。

1) テキストビューを動的に作成して既存のビューに追加するか、2) レイアウトに配置された 4 つのテキストビューを作成し、while ループで適切に設定する必要があります。

編集:一般的に、オプション#1を使用することをお勧めします。これは、一貫して変化するデータベースを操作している場合(および将来の変更を容易にするため)、間違いなく最も賢明なアプローチであるためです。ただし、プロジェクトの仕様で、テーブルに固定数の行を含めることが絶対に確実である場合 (たとえば、アプリには 4 つのカフェしかなく、別の名前をロードするためにテーブルを交換するだけであるため)の場合、手っ取り早い方法は、4 つのテキストビューを作成し、それらを繰り返して各テキストビューを適切に設定することです。

この回答は、データベースをどのように使用/操作するつもりかを教えてくれなかったため、主に推測から出されたものであり、完全にあなたの判断次第です。

于 2013-03-04T08:30:59.117 に答える