0

正しく機能する SQLite からのデータを含む ListView があります。今、私はこのリストにもっと多くのものを追加したいと思っています. 各行に、EditText と CheckBox を追加します。このようなもの:


item1 チェックボックス

編集テキスト


item2 チェックボックス

編集テキスト


これは私のリストクラスです:

public class SeleccionarRelacionPregResp extends Activity implements, OnItemClickListener {

private ListView listaTodo;

private ListAdapter uGraduateListAdapter;
private String bundledCodigoPuntoDeControl;

private ArrayList<UndergraduateDetailsPojo> pojoArrayList;
protected DokesimApplication app;
String codigocaja;
Button btnPruebasGuardar;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.seleccionartodo);

    listaTodo = (ListView) findViewById(R.id.ListaTodo);
    listaTodo.setOnItemClickListener(this);

    pojoArrayList = new ArrayList<UndergraduateDetailsPojo>();

    uGraduateListAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, populateList());

    listaTodo.setAdapter(uGraduateListAdapter);

    PuntosDeControl pControlSeleccionado = new PuntosDeControl();
    app = (DokesimApplication) getApplicationContext();
    pControlSeleccionado = app.getpuntocontrol();   

    codigocaja = pControlSeleccionado.codigocaja;


}


public List<String> populateList() {

    List<String> uGraduateNamesList = new ArrayList<String>();

    AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(this);

    SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();

    Cursor cursor = sqliteDatabase.query("RelacionPregResp", null,
            " relprcodigocaja = '" + codigocaja + "'",
            null, null, null, null);

    startManagingCursor(cursor);

    while (cursor.moveToNext()) {

        String numeropregunta = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.numeropregunta));
        String relprcodigocaja = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.relprcodigocaja));
        String codigopregunta = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.codigopregunta));
        String pregunta = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.pregunta));
        String codigorespuesta = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.codigorespuesta));
        String respuesta = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.respuesta));
        String valor = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.valor));
        String tipodeguia = cursor.getString(cursor
                .getColumnIndex(AndroidOpenDbHelper.tipodeguia));

        UndergraduateDetailsPojo ugPojoClass = new UndergraduateDetailsPojo();

        ugPojoClass.setNumeroPregunta(numeropregunta);
        ugPojoClass.setRelPrCodigoCaja(relprcodigocaja);
        ugPojoClass.setCodigoPregunta(codigopregunta);
        ugPojoClass.setPregunta(pregunta);
        ugPojoClass.setCodigoRespuesta(codigorespuesta);
        ugPojoClass.setRespuesta(respuesta);
        ugPojoClass.setValor(valor);
        ugPojoClass.setTipoDeGuia(tipodeguia);

        pojoArrayList.add(ugPojoClass);

        uGraduateNamesList.add(pregunta);


    }

    sqliteDatabase.close();

    return uGraduateNamesList;
}

@Override
protected void onResume() {
    super.onResume();
    uGraduateListAdapter = new ArrayAdapter(this,
            android.R.layout.simple_list_item_1, populateList());
    listaTodo.setAdapter(uGraduateListAdapter);
}

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {


}
}

どうすればよいか、いくつかの提案や例が必要です。

助けてくれてありがとう。

4

2 に答える 2

1

基本的に必要なのはカスタム SimpleCursorAdapter です。

各リスト行に 2 つの TextView を持つサンプル プログラムを貼り付けています。

要件に応じて変更する必要があります。

package org.sample;

import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyAdapter extends SimpleCursorAdapter
{
    private Context context;
    private Cursor cursor;
    private int layout;

    public MyAdapter(Context context, int layout, Cursor cursor, String[] from,
            int[] to, int flags)
    {
        super(context, layout, cursor, from, to, flags);
        this.context = context;
        this.cursor = cursor;
        this.layout = layout;
    }

    @Override
    public int getCount()
    {
        if (cursor != null)
            return cursor.getCount();
        else
            return 0;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup)
    {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (view == null)
        {
            view = inflater.inflate(layout, null);
        }
        cursor.moveToPosition(position);
        String title = cursor.getString(cursor
                .getColumnIndex(DBHelper.BOOK_TITLE));
        String author = cursor.getString(cursor
                .getColumnIndex(DBHelper.BOOK_AUTHOR));


        TextView titleTxt = (TextView) view.findViewById(R.id.bTitle);
        TextView authorTxt = (TextView) view.findViewById(R.id.bAuthor);

        titleTxt.setText(title);
        authorTxt.setText(author);

        return view;
    }


}

MainActivity でカーソルを使用する準備ができたら、次のコードを記述できます。

myAdapter = new MyAdapter(context, R.layout.row, cursor, new String[]{ DBHelper.BOOK_TITLE, DBHelper.BOOK_AUTHOR }, new int[]{ R.id.bTitle, R.id.bAuthor }, 0);
listView.setAdapter(myAdapter);
于 2012-06-07T08:06:53.437 に答える
1

たとえば、必要なものをアダプターから拡張する独自のクラスを作成しSimpleCursorAdapter、次にファイルに固有のXML要素を作成し、メソッドをListViewオーバーライドgetView()して各アイテムを制御する必要がありますListView。すべての行の子ウィジェットを保持する任意のオブジェクトを表すデザイン パターン を作成して使用することをお勧めしますHolder。これにより、アイテムを完全に制御できます。

それでは、基本的な例を見てみましょう:

の宣言と開始ListView

this.contactList = new ListView(this);
this.contactList = (ListView) findViewById(R.id.contactList);
this.contactList.setAdapter(new ContactsAdapter());

これContactsAdapterは、独自に作成したアダプターです。

public ContactsAdapter() {
            super(getApplicationContext(), 
                    R.layout.listview, cursor, new String[] {"name", "email", "phone"}, new int[] {R.id.name, R.id.email});
        }   

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            rowsWrapper = null;
            LayoutInflater inflater = getLayoutInflater();
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.listview, null, false);
                rowsWrapper = new ListWidgetWrapper(convertView);
                convertView.setTag(rowsWrapper);
            }
            else {
                rowsWrapper = (ListWidgetWrapper) convertView.getTag();
            }
            Cursor tempC = cursor;
            tempC.moveToPosition(position);

            setActivitySettings();
            rowsWrapper.getNameColumn().setText(tempC.getString(1));
            rowsWrapper.getEmailColumn().setText(tempC.getString(2));

            tempC = null;

            return convertView; 
        }
    }

rowsWrapper は設計パターンに記載されていますHolder

public class ListWidgetWrapper {

    private View inView;
    private TextView nameColumn = null, emailColumn = null, phoneColumn = null;

    public ListWidgetWrapper(View inView) {
        this.inView = inView;
    }

    public int getNameId() {
        return inView.findViewById(R.id.name).getId();
    }

    public int getEmailId() {
        return inView.findViewById(R.id.email).getId();
    }


    public TextView getNameColumn() {
        if (this.nameColumn == null) {
            this.nameColumn = (TextView) inView.findViewById(R.id.name);
        }
        return this.nameColumn;
    }

    public TextView getEmailColumn() {
        if (this.emailColumn == null) {
            this.emailColumn = (TextView) inView.findViewById(R.id.email);
        }
        return this.emailColumn;
    }
}

だから私はここにTextView要素を持っています、あなたはあなたが欲しいウィジェットをここに持っていますListView。これにはより多くの実装を記述する必要がありますが、たとえばデザインパターンを使用しない場合は、より高速でエネルギー消費が少なくなります。これがないと、含まれないときHolderに行がListView繰り返し作成されView、後で戻るためです。

SimpleCursorAdapter の詳細

于 2012-06-07T08:07:01.887 に答える