GridView 实现单选

本文介绍了一种使用Android中的GridView实现单选按钮效果的方法。通过自定义GridItem类继承RelativeLayout并实现Checkable接口来控制选中状态的显示,并在Adapter中设置初始选中项和点击监听,以确保每次只能选择一个项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值