user3760741
user3760741

Reputation: 163

Checkbox not showing in CheckedTextView Android

I am trying to create a list something like this:

<image><text>       <checkbox>.

So far the text and image appears but the checkbox does not. Most of the code is adapted from here: http://www.learn2crack.com/2013/10/android-custom-listview-images-text-example.html

activity_filter_restaurants.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

<ListView
    android:id="@+id/listFilter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</ListView>
</RelativeLayout>

list_filter_restaurants.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TableRow>
        <ImageView
            android:id="@+id/imgfilter"
            android:layout_height="100dp"
            android:layout_width="100dp" />

    <CheckedTextView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/checkedTextView"
        android:layout_column="2"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:checked="false"/>
</TableRow>
</TableLayout>

Filterlist.java

public class FilterList extends ArrayAdapter<String> {
    private final Activity context;
    private final String[] options;
    private final Integer[] optionImageId;

    CheckedTextView chktxtTitle;

    public FilterList(Activity Context, String [] options, Integer [] optionImageId){
        super(Context, R.layout.list_filter_restaurants,options);
        this.context = Context;
        this.options = options;
        this.optionImageId = optionImageId;
    }

    @Override
    public View getView (int position, View view, ViewGroup parent){
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView= inflater.inflate(R.layout.list_filter_restaurants, null, true);

        chktxtTitle = (CheckedTextView) rowView.findViewById(R.id.checkedTextView);

        chktxtTitle.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick (View v){
                if(chktxtTitle.isChecked())
                    chktxtTitle.setChecked(false);
                else
                    chktxtTitle.setChecked(true);
            }
        });


        ImageView imageView = (ImageView) rowView.findViewById(R.id.imgfilter);
        chktxtTitle.setText(options[position]);
        //chktxtTitle.setCheckMarkDrawable(android.R.attr.listChoiceIndicatorMultiple);
        imageView.setImageResource(optionImageId[position]);
        return rowView;
    }
}

FilterRestaurants.java

public class FilterRestaurants extends Activity {

    ListView filterlist;
    String [] options = {
            "  Vegetarian","  Seafood","  Western food","  Indian/South Asian","  Halal/Islamic","  Chinese","  Sandwiches",
            "  Deli", "  Coffee"
            };

    Integer [] optionsId = {
            R.drawable.vegan,
            R.drawable.seafood,
            R.drawable.westernfood,
            R.drawable.indian,
            R.drawable.halal,
            R.drawable.chinese,
            R.drawable.sandwiches,
            R.drawable.deli,
            R.drawable.coffee
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.header_food);

        setContentView(R.layout.activity_filter_restaurants);

        CustomList adaptor = new CustomList(FilterRestaurants.this,options,optionsId);

        filterlist = (ListView) findViewById(R.id.listFilter);
        filterlist.setAdapter(adaptor);
       // filterlist.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        filterlist.setChoiceMode(ListView.CHOICE_MODE_NONE);
        filterlist.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                Toast.makeText(FilterRestaurants.this,"Yoy clicked at "+options[+ position],Toast.LENGTH_SHORT).show();
            }
        });
    }

Upvotes: 2

Views: 957

Answers (2)

stud91
stud91

Reputation: 1854

There is a simpler implementation of what you are trying to do. You can try this. You don't need an adaptor for this and let go of the filterlist.java class and the list_filter_restaurants.xml file. Just have a CheckedTextView object in your xml file and this code below will set an image to the left of the CheckedTextView.

Drawable imageDrawable = getBaseContext().getResources.getDrawable(R.drawable.your_image_name);

((CheckedTextView) chktxtTitle).setCompoundDrawables(imageDrawable,null,null,null);

Upvotes: 1

Illegal Argument
Illegal Argument

Reputation: 10358

Looking at your code I find following inconsistencies:

  1. getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.header_food); in filterresturants.java should be above setContentView()
  2. Inside your FilterList.java you are providing wrong layout resource id in both constructor's super() and getView() method. Change it to R.layout.list_filter_restaurants xml
  3. And finally from the docs you need to set the setChoiceMode() to none in your CheckedTextView inside adapter.

Upvotes: 0

Related Questions