0

これがばかげているように思われる場合は申し訳ありませんが、私はこれらすべてのものに少し慣れていません。状況は、リストビューに表示する必要のあるデータベースに大量のデータが保存されていることです。最初のビューは15行をプルし、データベースの14列のうち2列のみを使用します。このアダプタを使用して、これをリストビューに表示します。

private class CustomListAdapter extends SimpleCursorAdapter {

    private Cursor cursor;

    public CustomListAdapter(Context context, int textViewResourceId, Cursor cursor, String from[], int to[]) {
            super(context, textViewResourceId, cursor, from, to);
            this.cursor = cursor;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);
            }
            cursor.moveToPosition(position);
            if (cursor != null) {
                    TextView lt = (TextView) v.findViewById(R.id.lefttext);
                    TextView rt = (TextView) v.findViewById(R.id.righttext);
                    if (lt != null) {
                          lt.setText(/*cursor.getString(cursor.getColumnIndex(EwstableContentProvider.TIMESTAMP))*/cursor.getString(cursor.getColumnIndex(EwstableContentProvider._ID)));                            }
                    if (rt != null){
                          rt.setText(cursor.getString(cursor.getColumnIndex(EwstableContentProvider.TOTALEWS)));
                    }

            }
            return v;
    }
}

}

これはばかげているかもしれませんが、少なくともそれは機能します。次のアクティビティでは、すべての列のデータを表示する必要がありますが、ユーザーが前のアクティビティで選択した行のデータのみを表示する必要があります。http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/のようなリストビュー内に配置することを検討していました。これは、アダプターを変更した場所でもあります。このようにして、dbの2つのフィールドからのデータをリストビューの各アイテムに配置します。これは完璧です。1つのデータポイントとそれに伴うコメントになります。問題は、この時点でカーソルに1行しかないため、@ Overrideの後のビットが1回だけ実行されるため、リストビューの7つの項目の代わりに1つ取得することです。たとえそれがまったく異なる方法でそれをすることであるとしても、私は本当にどんな助けにも感謝します。

4

2 に答える 2

1

列の数がわかっていると仮定すると、forループを使用してすべての列を反復処理し、各文字列を文字列配列に格納できますか。

String[] arr = new String[cursor.getColumnCount()];
for(int i=0; i < cursor.getColumnCount(); i++)
    arr[i] = cursor.getString(i);

次に、リストビューのArrayAdapterでString[]を使用します。

于 2012-06-05T22:25:49.573 に答える
0

更新:申し訳ありませんが、質問を注意深く読んでいませんでした。他の答えを参照してください。

カーソルアダプタを使用する必要があります。SimpleCursorAdapterをお勧めします(以下の例)。

また、「from」パラメーターを、表示するテキストの列名(キー)に変更する必要があります。私の個人コードの例を以下に示します。この行、

new String[] { DBAdapter.KEY_NAME },

重要なものです。DBAdapterでは次のように定義されています。

public static final String KEY_NAME = "name";

これは、自分のデータベースの最初の列の名前と一致します。

DBAdapter dba = new DBAdapter(this);
    dba.open();
    Cursor c = dba.list_listMode();

    SimpleCursorAdapter ca = new SimpleCursorAdapter(
            this,
            R.layout.list_item,
            c,
            new String[] { DBAdapter.KEY_NAME },
            new int[] { R.id.list_item_text });

    lv.setTextFilterEnabled(true);
    lv.setAdapter(ca);

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id_long) {
于 2012-06-05T22:11:51.513 に答える