有没有办法检查gridview
中的元素?
我找不到toggle()
方法或setChecked(true)
,我的gridview
有一个扩展BaseAdapter的适配器,我想在检查元素时更改背景颜色(不仅选中)。
我会喜欢ListView:GridView.setChoicheMode(MULTICHOICE)
然后item.toggle()
或item.setChecked(true)
并将检查状态存储到视图中。
修改:
我添加了一个空CheckedTextView
来存储检查状态。
但有更清洁的方法吗?
EDIT2 现在我可以做我想要的但是当我向下滚动gridview然后我向上滚动选择的项目不再被选中。
boolean checked = layout.getCheckedItemPositions().get(position);
if(checked){
check.toggle();
view.setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
else{
check.toggle();
view.setBackgroundColor(getResources().getColor(android.R.color.holo_green_light));
}
其中layout是gridview的布局。 我想我必须修改我的适配器的getView方法,但是这段代码不起作用:
CheckedTextView check = (CheckedTextView) layout.findViewById(R.id.txv_grid_check);
boolean checked = check.isChecked();
if(checked){
layout.setBackgroundColor(c.getResources().getColor(android.R.color.holo_green_light));
}
else{
layout.setBackgroundColor(c.getResources().getColor(android.R.color.transparent));
}
编辑3
我认为没有办法做我想要的(将状态存储在CheckedTextView元素中),因为在滚动列表或gridview时会破坏和重新创建视图。所以我需要处理适配器中的项目状态。我使用了一个HashSet的int来存储已检查项的位置,并且我从gridview处理了一个公共方法来处理这个列表。 在gridview活动中,可以获取适配器然后执行myadapter.check(int position)或取消选中(int position)。 然后在适配器中,进入getView()方法,我们需要检查位置是否在列表中并设置适当的背景颜色。
答案 0 :(得分:2)
我希望answer能帮到你。在此示例中,网格项布局中有TextView,您可以将其更改为CheckedTextView或Checkbox。在getView()中检查状态并设置Grid项的Background Color。
答案 1 :(得分:0)
使用此代码。这对我来说很有用。
public View getView(final int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
final MyDat mydat;// = new MyDat();
if (position >= MyViewedMeItemList.size()) {
mydat = new MyDat();
}
else
{
mydat = MyViewedMeItemList.get(position);
}
mydat.title = (TextView)vi.findViewById(R.id.title); // title
mydat.artist = (TextView)vi.findViewById(R.id.artist); // artist name
mydat.duration = (TextView)vi.findViewById(R.id.duration); // duration
mydat.thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
mydat.cccheckbomx=(CheckBox)vi.findViewById(R.id.rajesh);
mydat.cccheckbomx.setVisibility(View.VISIBLE);
if (mydat.myCheckStatus) {
// Toast.makeText(MessageInboxDelete.this, "true --->" +
// position,
// Toast.LENGTH_SHORT).show();
mydat.cccheckbomx.setChecked(true);
} else {
/*
* Toast.makeText(MessageInboxDelete.this, "false --->" +
* position, Toast.LENGTH_SHORT).show();
*/
mydat.cccheckbomx.setChecked(false);
}
mydat.cccheckbomx.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
// TODO Auto-generated method stub
//Toast.makeText(context, "Rajesh", Toast.LENGTH_SHORT).show();
int gridchild;
gridchild = list.getChildCount();
for (int j = 0; j < gridchild; j++) {
// DrawArea_Steptwo.gridview.getChildAt(j);
// Toast.makeText(context, "Rajesh", Toast.LENGTH_SHORT).show();
RelativeLayout gridchildlayout = (RelativeLayout) list
.getChildAt(j);
CheckBox tempRadioToggle = (CheckBox) gridchildlayout
.findViewById(R.id.rajesh);
tempRadioToggle.setChecked(false);
MyDat tempViewholder = MyViewedMeItemList.get(j);
tempViewholder.myCheckStatus = false;
}
for(int j = 0; j < MyViewedMeItemList.size(); j++) {
MyDat tempViewholder = MyViewedMeItemList.get(j);
tempViewholder.myCheckStatus = false;
}
CheckBox tempRadioToggle = (CheckBox) paramView.findViewById(R.id.rajesh);
tempRadioToggle.setChecked(true);
MyDat tempViewholder = MyViewedMeItemList.get(position);
if (tempViewholder.myCheckStatus == false) {
tempViewholder.myCheckStatus = true;
// tempViewholder.deleteRadioButton.setChecked(true);
} else {
tempViewholder.myCheckStatus = false;
// tempViewholder.deleteRadioButton.setChecked(false);
}
}
});
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
// Setting all values in listview
mydat.title.setText(song.get(CustomizedListView.KEY_TITLE));
mydat.artist.setText(song.get(CustomizedListView.KEY_ARTIST));
mydat.duration.setText(song.get(CustomizedListView.KEY_DURATION));
imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), mydat.thumb_image);
if (MyViewedMeItemList.size() <= position) {
MyViewedMeItemList.add(mydat);
}
return vi;
}
public class MyDat{
Boolean myCheckStatus=false;
TextView title ;
TextView artist;
TextView duration;
ImageView thumb_image;
CheckBox cccheckbomx;
}
}