Kumar
Kumar

Reputation: 119

Grid view Item click color change

I have a grid in a activity i need to sort I wrote sorting logic here is my code. but the problem is when i tried to click on any grid item. background of the item is not changing is there any way to change item background

    HashMap<String, Integer> map = new HashMap<String, Integer>();
    ValueComparator bvc = new ValueComparator(map);
    TreeMap<String, Integer> sorted_map = new TreeMap<String, Integer>(bvc);

    map.put("Windows", sharedPref.getInt("Windows", 0));
    map.put("iOS", sharedPref.getInt("iOS", 0));
    map.put("Android", sharedPref.getInt("Android", 0));
    map.put("Blackberry", sharedPref.getInt("Blackberry", 0));
    map.put("Java", sharedPref.getInt("Java", 0));
    map.put("JQuery", sharedPref.getInt("JQuery", 0));
    map.put("Phonegap", sharedPref.getInt("Phonegap", 0));
    map.put("SQLite", sharedPref.getInt("SQLite", 0));
    map.put("Thread", sharedPref.getInt("Thread", 0));
    map.put("Video", sharedPref.getInt("Video", 0));
    sorted_map.putAll(map);

    iconList = new ArrayList<Integer>();
    Map<String, Integer> treeMap = new TreeMap<String, Integer>(sorted_map);

    for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
    System.out.println("Key : " + entry.getKey() 
                                      + " Value : " + entry.getValue());


    sortedList.add(entry.getKey());

    }
    package info.payism.onlineservice;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomGridAdapter extends BaseAdapter {

private Context context;
private final String[] gridValues;
ImageView imageView;

// Constructor to initialize values
public CustomGridAdapter(Context context, String[] gridValues) {
    this.context = context;
    this.gridValues = gridValues;
}

@Override
public int getCount() {

    // Number of times getView method call depends upon gridValues.length
    return gridValues.length;
}

@Override
public Object getItem(int position) {

    return null;
}

@Override
public long getItemId(int position) {

    return 0;
}

// Number of times getView method call depends upon gridValues.length

public View getView(int position, View convertView, ViewGroup parent) {

    // LayoutInflator to call external grid_item.xml file

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from grid_item.xml
        gridView = inflater.inflate(R.layout.grid_item, null);

        imageView= (ImageView) gridView.findViewById(R.id.grid_item_image);
        imageView.setBackgroundColor(Color.parseColor("#ffffff"));

        // set value into textview
        Typeface font = Typeface.createFromAsset(context.getAssets(),
                "fonts/gotham-book-1361523257.ttf");
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setBackgroundColor(Color.parseColor("#ffffff"));
        textView.setTypeface(font);
        textView.setText(gridValues[position]);

        String icon_tag_name = gridValues[position];

        if (icon_tag_name.equals("Mobile")) {

            imageView.setImageResource(R.drawable.vmobile_blue);

        } else if (icon_tag_name.equals("Data Card")) {

            imageView.setImageResource(R.drawable.vdatacard_blue);

        } else if (icon_tag_name.equals("DTH")) {

            imageView.setImageResource(R.drawable.vdth_blue);

        } else if (icon_tag_name.equals("Postpaid/Landline")) {

            imageView.setImageResource(R.drawable.vpostpaid_blue);

        } else if (icon_tag_name.equals("Money Transfer")) {

            imageView.setImageResource(R.drawable.vmoney_blue);

        } else if (icon_tag_name.equals("Electricity")) {

            imageView.setImageResource(R.drawable.velectricity_blue);

        } else if (icon_tag_name.equals("Bus Ticket")) {

            imageView.setImageResource(R.drawable.vbus_blue);

        } else if (icon_tag_name.equals("Entertainment")) {

            imageView.setImageResource(R.drawable.ventertainment_blue);

        } else if (icon_tag_name.equals("GasBill")) {

            imageView.setImageResource(R.drawable.vgas_blue);

        } else if (icon_tag_name.equals("Waterbill")) {

            imageView.setImageResource(R.drawable.vwater_blue);

        } else if (icon_tag_name.equals("Lifeinsurence")) {

            imageView.setImageResource(R.drawable.vinsurance_blue);

        } else if (icon_tag_name.equals("GiftVoucher")) {

            imageView.setImageResource(R.drawable.vgift_blue);

        } else {
            imageView.setImageResource(R.drawable.vflight_blue);
        }

    } else {

        gridView = (View) convertView;

    }

    return gridView;
}

}

Upvotes: 1

Views: 5113

Answers (4)

Raj Kumar Gupta
Raj Kumar Gupta

Reputation: 1

Make a activity XML Layout grid_color_selector.xml and use this layout in your custom GridView layout in android:background="@drawable/grid_color_selector".

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:drawable="@android:color/holo_blue_light" android:state_pressed="true"/>
        <item android:drawable="@android:color/holo_blue_light" android:state_selected="true"/>
        <item android:drawable="@color/white"/>

    </selector>

Upvotes: 0

Apurva
Apurva

Reputation: 7901

Use this

/res/drawable/grid_view_item.xml

<item android:state_pressed="true" >
    <shape>
        <solid android:color="@color/grid_item_pressed"/>
    </shape>
</item>

/res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="grid_item_pressed">#ffaa66</color>
</resources>

And now put android:background="@drawable/grid_view_item" attribute in your xml containing grid view

Upvotes: 0

Hookah_Smoka
Hookah_Smoka

Reputation: 374

You can define a selector as a drawable and add it as background of your grid item.

First, create a new Drawable resource file which contains your selector:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="false" android:state_focused="true" android:color="@color/your_pressed_color" />
    <item android:state_pressed="true" android:color="@color/your_pressed_color" />
    <item android:color="@color/your_default_color" />
</selector>

Afterwards, add this selector to your grid item:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/your_selector"
    android:orientation="vertical">

    <!--The grid item layout elements-->

</LinearLayout>

Upvotes: 2

GIGAMOLE
GIGAMOLE

Reputation: 1266

gridView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {
            v.setBackgroundColor(Color.RED);
        }

    });

Upvotes: 1

Related Questions