My layout has a GridView. Similar to Google’s API demo, each grid has an image. Also, I customized a “Drawable image” which used to highlight the currently selected item. When touch the grid’s image, the “Drawable image” can be show. Unfortunately, it will disappear when I not touch the grid.
I hope the GridView will keep to highlight the selected item. Even the user is scrolling the screen.
From here, I found some similar post.
1) Keep image in GridView selected
2) Android gridview keep item selected
But I can’t understand their method and they are not using customized image. Can anyone give me some help? Please.
Following is my code:
    gridAdapter  adapter =  new   gridAdapter  (this, images);
    gv = (GridView) findViewById (R.id.gridView1);
    gv.setAdapter(adapter);
    gv.setSelector(R.drawable.circle);
    gv.setDrawSelectorOnTop(true);
Following is my updated code:
public class GridViewBasic extends Activity {
    Integer[] imageIDs = {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher    };
    GridView gridView;
    public int lastPos;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            gridView = (GridView) findViewById(R.id.gridView1);
            gridView.setAdapter(new ImageAdapter(this));
            gridView.setSelected(true);
            gridView.setSelector(R.drawable.circle);
            gridView.setDrawSelectorOnTop(true);
            gridView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
            gridView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent,  View v, int position, long id) {   
                    lastPos = position;
                    gridView.setSelection((int)(gridView.getAdapter()).getItemId(lastPos));
                    System.out.println ("getItemId ="+(gridView.getAdapter()).getItemId(lastPos));
                }
            });        
        }
        public class ImageAdapter extends BaseAdapter 
        {
            private Context context;
            public ImageAdapter(Context c)  {
                context = c;
            }
            //---returns the number of images---
            public int getCount() {
                return imageIDs.length;
            }
            //---returns the ID of an item--- 
            public Object getItem(int position) {
                return position;
            }
            public long getItemId(int position) {
                return position;
            }
            //---returns an ImageView view---
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageView;
                if (convertView == null) {
                    imageView = new ImageView(context);
                    imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(5, 5, 5, 5);
                } else {
                    imageView = (ImageView) convertView;
                }
                imageView.setImageResource(imageIDs[position]);
                return imageView;
            }
        }    
}
 
     
     
     
     
     
    