2010-03-01 13 views
7

Estoy tratando de hacer una lista de compras, donde el CheckedTextView está marcado si ya ha elegido su artículo previamente, es decir, el elemento tiene un valor booleano establecido en verdadero si se selecciona.CheckedTextView establecido en activado oncreate en listview?

He redefinido el método getview para cambiar el texto de CheckedTextView con setText() y eso funciona, pero establecer el método setChecked (verdadero) en CheckedTextView no lo hace verificar.

sé que no estoy reciclando las vistas en getView(), que será un proyecto más adelante en el proyecto, haga Sé que necesito para ver una marca verde =)

¿Alguna idea? por favor ayuda.

mis archivos xml:

test.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/textCheckMark" 
    android:paddingLeft="5dip" 
    android:paddingRight="50dip" 
    android:textColor="#000000" 
    android:background="#ffffff" 
    android:tag="text1" 
    android:text="testtestetstt" 
    android:focusable="false"/> 

listfippel.java

package nu.listfippel.mitt; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import android.app.ListActivity; 
import android.content.Context; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.text.Spannable; 
import android.text.style.StrikethroughSpan; 
import android.text.style.StyleSpan; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.CheckBox; 
import android.widget.CheckedTextView; 
import android.widget.ListAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class listfippel extends ListActivity { 

    //ArrayList<Ingred> ing; 
    Ingred i1 = new Ingred("banan", 2, 1, true); 
    Ingred i2 = new Ingred("äpple", 3, 1, false); 
    Ingred i3 = new Ingred("päron", 3, 1, true); 
    Ingred i4 = new Ingred("gröt", 3, 1, false); 
    Ingred i5 = new Ingred("bröd", 3, 1, false); 
    Ingred i6 = new Ingred("kyckling", 3, 1, false); 
    Ingred i7 = new Ingred("röd paprika", 3, 1, false); 
    Ingred i8 = new Ingred("tårta", 3, 1, false); 
    Ingred i9 = new Ingred("bappelsin", 3, 1, false); 
    Ingred i10 = new Ingred("gurka", 3, 1, true); 
    CheckedTextView ctv; 
    Ingred[] ingarray = { i1, i2, i3, i4, i5, i6, i7, i8, i9, i10 }; 


    Ingadapter adapter; 
    Ingred temp; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list); 


     ArrayList<Ingred> ing = new ArrayList<Ingred>(Arrays.asList(ingarray)); 

     adapter = new Ingadapter(this, R.layout.test, ing); 
     //adapter = new IngArrayAdapter(ing); 

     OnItemClickListener il = new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View arg1, int index, 
        long arg3) { 

       temp = (Ingred)parent.getItemAtPosition(index); 


       if (temp.getCheck()){ 
        Toast toast = Toast.makeText(getApplicationContext(), 
          "Du avmarkerade nyss den\nklarmarkerade varan " + parent.getItemAtPosition(index).toString(), 
          Toast.LENGTH_LONG); 
        toast.setGravity(Gravity.CENTER, 0, 0); 
        toast.show(); 
       } 

       if (!temp.getCheck()){ 
        temp.setCheck(true); 

        //ctv.setChecked(true); 
       } 
       else { 
        temp.setCheck(false); 
       } 
       adapter.notifyDataSetChanged(); 
      } 
     }; 


     setListAdapter(adapter); 
     //setTitleColor(Color.RED); 
     getListView().setOnItemClickListener(il); 
     getListView().setChoiceMode(2); 



    } 
    class Ingadapter extends ArrayAdapter<Ingred>{ 

     public Ingadapter(Context context, int textViewResourceId, 
       List<Ingred> objects) { 
      super(context, textViewResourceId, objects); 
      // TODO Auto-generated constructor stub 
     } 


     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      LayoutInflater inflater=getLayoutInflater(); 
      View row = inflater.inflate(R.layout.test, null); 
      row.setTag(R.id.text1, row.findViewById(R.id.text1)); 

      CheckedTextView ctv =(CheckedTextView)row.getTag(R.id.text1); 

      Ingred temp = (Ingred)((AdapterView<?>) parent).getItemAtPosition(position); 

      if(temp.getCheck()){ 
       ctv.setChecked(true); 
      } 

      ctv.setText(temp.toString()); 

      return (row); 
     } 

    } 

    } 

Ingred.java

package nu.listfippel.mitt; 

public class Ingred { 

    private String namn; 
    @SuppressWarnings("unused") 
    private int volym; 
    private double antal; 
    private boolean check = false; 
    private String retstring; 

    public Ingred(String namn, double antal, int volym, boolean check){ 
     this.namn = namn; 
     this.antal = antal; 
     this.volym = volym; 
     this.check = check; 
    } 

    public String toString(){ 

     if (!this.check){ 
     retstring = namn + " \n(" + antal + " behövs)"; 
     } 
     else { 
      retstring = namn; 
     } 
     return retstring; 
    } 

    public boolean getCheck(){ 
     return this.check; 
    } 

    public void setCheck(boolean check){ 
     this.check = check; 
    } 
} 

Respuesta

10

Si se va a utilizar setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);, necesita usar el método setSelection() en ListView para indicar cuál comprobar, no manejarlo usted mismo durante el enlace de fila.

+0

Comenté el getListView(). SetChoiceMode (2) y ahora funciona, no sé por qué pero me excuse con ser un novato total =) Parece que no es un código sólido de mi parte, solo espero que se mantendrán juntos en el largo plazo, gracias por la punta =) – Sotarn