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 textViewRes开发者_如何学GoourceId,
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;
}
}
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.
Look at this post: Android ListView CHOICE_MODE_MULTIPLE, how to set checked index? It sais that the method setItemChecked of ListView should be used to set the preselection.
精彩评论