Autore Topic: Display checkbox: checked o unchecked usando CursorAdapter e SQLite database  (Letto 286 volte)

Offline PaoDieci

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5x
  • Sistema operativo:
    Mac OS Sierra
Ciao ragazzi, sto sviluppando un applicazione molto semplice composta da una listview con degli elementi dentro di essa salvati nel database in SQLite.
Questi elementi sono composti a loro volta con una TextView e una checkbox che vengono caricati al lancio dell'activity.
Il mio problema è cambiare lo stato della checkbox presente nella singola row della listview a seconda del valore '1'  o '0' presente nel database.

il codice che mi permette di visualizzare la listview è questo :

Codice (Java): [Seleziona]
private void displayListView() {
        Cursor cursor = dbHelper.fetchAllElements();

        // The desired columns to be bound
        String[] columns = new String[]{elementsDbAdapeter.KEY_NAME, elementsDbAdapeter.KEY_CHECK};

        // the XML defined views which the data will be bound to
        int[] to = new int[]{R.id.textViewName, R.id.checkBox};

        // create the adapter using the cursor pointing to the desired data as well as the layout information
        dataAdapter = new SimpleCursorAdapter(this, R.layout.elements_info, cursor, columns, to, 0);

        final ListView listView = (ListView) findViewById(R.id.listViewElements);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);

        final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
        int countElements = dbHelper.countElements();
        int countElementsChecked = dbHelper.countElementsChecked();

        progressBar.setMax(countElements);
        setProgressBar(countElementsChecked);

    }

Io voglio associare questo elemento elementsDbAdapeter.KEY_CHECK (valore '0' o '1' presente nel database ) a  R.id.checkBox. Che già faccio ma nel modo sbagliato!

Attualemente quello che vedo è cio :

Pasteboard — Uploaded Image

Grazie, Paolo  :-)

Offline Carni

  • Utente junior
  • **
  • Post: 62
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    R3D5HA
  • Sistema operativo:
    Windows 10
Re:Display checkbox: checked o unchecked usando CursorAdapter e SQLite database
« Risposta #1 il: 12 Aprile 2017, 12:50:32 CEST »
0
Ciao, la parte più semplice è quella di creare un Adapter Custom così:
Codice (Java): [Seleziona]
public class ArticleInfo {
 String title;
 int checked;

 //qui vanno i metodi get e set e il costruttore

}

public class CustomAdapter extends BaseAdapter
{
 
    private List<ArticleInfo> articles=null;
    private Context context=null;

 
    public CustomAdapter(Context context,List<ArticleInfo> articles)
    {
        this.articles=articles;
        this.context=context;
    }
 
    @Override
    public int getCount()
    {
        return articles.size();
    }
 
    @Override
    public Object getItem(int position)
    {
        return articles.get(position);
    }
 
    @Override
    public long getItemId(int position)
    {
        return getItem(position).hashCode();
    }
 
    @Override
    public View getView(int position, View v, ViewGroup vg)
    {
        if (v==null)
        {
            v=LayoutInflater.from(context).inflate(R.layout.elements_info, null);
        }
        ArticleInfo ai=(ArticleInfo) getItem(position);
       
        TextView txt=(TextView) v.findViewById(R.id.textViewName);
        txt.setText(ai.getTitle());
       
        CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);
        checkBox.setChecked(ai.getChecked() == 1 : true ? false);
       

        return v;
    }
 
}


Questa la usi al posto della classe SimpleCursorAdapter, però devi trasformare il cursore in una lista. Io ho fatto una classe ArticleInfo, ma è generica. Puoi cambiare metodi, nomi e tutto.
« Ultima modifica: 12 Aprile 2017, 12:54:33 CEST da Carni »