tags:

views:

1454

answers:

1

I am trying to make a shoppinglist, where the CheckedTextView is checked if you have already picked your item previously ie the item has a boolean set to true if picked.

I have overriden the getview method to change the CheckedTextView text with setText() and that works but setting the setChecked(true) method in CheckedTextView doesnt not make it checked.

I know that I am not recycling any views in getview(), that will be a later project in the project, right know I need to see a green checkmark =)

Any thoughts? please help.

my xml files:

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;
}

}

+1  A: 

If you are going to use setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);, you need to use the setSelection() method on ListView to indicate which get checked, not handle that yourself during row binding.

CommonsWare
I commented out the getListView().setChoiceMode(2) and now it works, dont know why but I exscuse myself with being a total noob =)Feels like it is not a solid code on my part, just hoping it will hold together in the long run, thanks for the tip =)
Sotarn