GridView实现单选效果
public class MainActivity extends Activity {
private GridView gridview;
private int checked = 3;
private GridItem last;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
class ImageAdapter extends BaseAdapter {
private Context context;
//添加图片
private Integer[] mImageIds = { R.drawable.puzzle_00,
R.drawable.puzzle_01, R.drawable.puzzle_02,
R.drawable.puzzle_03, R.drawable.puzzle_04,
R.drawable.puzzle_05, R.drawable.puzzle_06,
R.drawable.puzzle_07, R.drawable.puzzle_08,
R.drawable.puzzle_09, R.drawable.puzzle_10,
R.drawable.puzzle_11, R.drawable.puzzle_12,
R.drawable.puzzle_13, R.drawable.puzzle_14,
R.drawable.puzzle_15, R.drawable.puzzle_16,
R.drawable.puzzle_17, R.drawable.puzzle_18,
R.drawable.puzzle_19, R.drawable.puzzle_20,
R.drawable.puzzle_21, R.drawable.puzzle_22,
R.drawable.puzzle_23, };
public ImageAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return mImageIds.length;
}
@Override
public Integer getItem(int position) {
return Integer.valueOf(mImageIds[position]);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
GridItem griditem;
if (convertView == null) {
griditem = new GridItem(context);
griditem.setLayoutParams(new GridView.LayoutParams(150, 200));
} else {
griditem = (GridItem) convertView;
}
griditem.setBg(getItem(position));
if (position != checked) {
griditem.setChecked(false);
}
return griditem;
}
}
gridview = (GridView) findViewById(R.id.images);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
if (last != null)
last.setChecked(false);
GridItem griditem = (GridItem) v;
griditem.setChecked(true);
checked = position;
last = (GridItem) v;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
class GridItem extends RelativeLayout implements Checkable {
private ImageView image;
private ImageView selected_icon;
private boolean isChecked = false;
public GridItem(Context context) {
super(context);
LayoutInflater.from(context).inflate(R.layout.grid_item, this);
image = (ImageView) findViewById(R.id.image);
selected_icon = (ImageView) findViewById(R.id.selected_icon);
}
@Override
public boolean isChecked() {
return isChecked;
}
@Override
public void setChecked(boolean checked) {
isChecked = checked;
if (true == checked) {
selected_icon.setVisibility(View.VISIBLE);
} else {
selected_icon.setVisibility(View.GONE);
}
}
@Override
public void toggle() {
isChecked = !isChecked;
if (true == isChecked) {
selected_icon.setVisibility(View.VISIBLE);
} else {
selected_icon.setVisibility(View.GONE);
}
}
public void setBg(int resId) {
if (image != null) {
image.setBackgroundResource(resId);
}
}
}