Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CheckedTextView set to checked oncreate in listview?

Tags:

android

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;
    }
}
like image 795
Sotarn Avatar asked Mar 01 '10 08:03

Sotarn


1 Answers

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.

like image 185
CommonsWare Avatar answered Nov 09 '22 16:11

CommonsWare