这是我的代码gridview使用arrayadapter,这是getview部分
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.children_row_grid, null);
holder.text_child_name = (TextView) convertView.findViewById(R.id.children_name);
holder.img_child_view = (ImageView) convertView.findViewById(R.id.image_children);
holder.text_child_month = (TextView) convertView.findViewById(R.id.text_children_month);
holder.layout_selected = (RelativeLayout) convertView.findViewById(R.id.layout_children_selected);
Resources r = getResources();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics());
int pixel_height = (int) pixels;
/*
* getting month value from the data of birth
* */
String dob = children_list.get(position).getDate_of_birth();
Date child_birthday = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dob = dob.replace("-", "/");
new ParsePosition(0);
try {
child_birthday = (Date) dateFormat.parse(dob);
} catch (java.text.ParseException e) {
e.printStackTrace();
}
holder.layout_selected.setId(children_list.get(position).getChild_id());
holder.img_child_view.setId(children_list.get(position).getChild_id());
display_month = Utill.getAgeinMonths(child_birthday);
holder.img_child_view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, pixel_height));
holder.img_child_view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "imcge clicked", Toast.LENGTH_SHORT).show();
children_count++;
text_children_count.setText("" + children_count);
//System.out.println("checking...."+intList.contains(v.getId()));
System.out.println("size of array:::" + intList.size());
if (intList.contains(v.getId())) {
System.out.println("yes");
System.out.println("..." + intList.contains(v.getId()));
Integer val = v.getId();
intList.remove(val);
holder.layout_selected.setVisibility(View.INVISIBLE);
} else {
intList.add(v.getId());
System.out.println("no");
System.out.println("..." + intList.contains(v.getId()));
holder.layout_selected.setVisibility(View.VISIBLE);
}
for (Integer value: intList) {
System.out.println("Value = " + value);
}
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String grname = children_list.get(position).getGroup_name();
if (grname == null) {
grname = "";
}
holder.text_child_name.setText(children_list.get(position).getFirst_name());
holder.text_child_month.setText(display_month + "," + grname);
Bitmap bitmap = decodeFile(new File(Environment.getExternalStorageDirectory() + "/com.x/unChildren/" + children_list.get(position).getPhoto()), ConfigurationData.staffImageSize, ConfigurationData.staffImageSize);
holder.img_child_view.setImageBitmap(bitmap);
return convertView;
}
}
问题:当我选择网格时,我在相对布局中添加了图像视图,工作正常,这里当我滚动网格视图时,选定的网格被更改
答案 0 :(得分:1)
回收视图时:
convertView != null
在这一部分:
}else{
holder=(ViewHolder)convertView.getTag();
}
您仍然需要测试条件并替换视图中的图像(如果它们已更改)。非null convertView并不意味着它具有您期望的内容,它只是意味着处理器不必重建布局。
换句话说,您可能需要在该部分代码中重置图像,替换onClick侦听器等。
答案 1 :(得分:1)
只需删除此
即可if (convertView == null)
答案 2 :(得分:0)
试试这个:
public View getView(final int position, View convertView,ViewGroup parent) {
final ViewHolder holder;
if(convertView == null){
holder=new ViewHolder();
convertView = LayoutInflater.from(context)
.inflate(R.layout.children_row_grid, null);
holder.text_child_name=(TextView)convertView.findViewById(R.id.children_name);
holder.img_child_view=(ImageView)convertView.findViewById(R.id.image_children);
holder.text_child_month=(TextView)convertView.findViewById(R.id.text_children_month);
holder.layout_selected=(RelativeLayout)convertView.findViewById(R.id.layout_children_selected);
Resources r = getResources();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics());
int pixel_height = (int) pixels;
/*
* getting month value from the data of birth
* */
String dob=children_list.get(position).getDate_of_birth();
Date child_birthday = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dob = dob.replace("-", "/");
new ParsePosition(0);
try {
child_birthday = (Date) dateFormat
.parse(dob);
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
display_month=XUtill.getAgeinMonths(child_birthday);
holder.img_child_view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT , pixel_height));
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
holder.layout_selected.setId(children_list.get(position).getChild_id());
holder.img_child_view.setId(children_list.get(position).getChild_id());
holder.img_child_view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "imcge clicked", Toast.LENGTH_SHORT).show();
children_count++;
text_children_count.setText(""+children_count);
//System.out.println("checking...."+intList.contains(v.getId()));
System.out.println("size of array:::"+intList.size());
if(intList.contains(v.getId())){
System.out.println("yes");
System.out.println("..."+intList.contains(v.getId()));
Integer val=v.getId();
intList.remove(val);
holder.layout_selected.setVisibility(View.INVISIBLE);
}else{
intList.add(v.getId());
System.out.println("no");
System.out.println("..."+intList.contains(v.getId()));
holder.layout_selected.setVisibility(View.VISIBLE);
}
}
});
if(intList.contains(holder.layout_selected.getId())){
holder.layout_selected.setVisibility(android.view.View.VISIBLE);
}else{
holder.layout_selected.setVisibility(android.view.View.INVISIBLE);
}
String grname=children_list.get(position).getGroup_name();
if(grname==null)
{
grname="";
}
holder.text_child_name.setText(children_list.get(position).getFirst_name());
holder.text_child_month.setText(display_month+","+grname);
Bitmap bitmap = decodeFile(new File( Environment.getExternalStorageDirectory()+"/com.x/y/"+children_list.get(position).getPhoto()), ConfigurationData.staffImageSize,ConfigurationData.staffImageSize);
holder.img_child_view.setImageBitmap(bitmap);
return convertView;
}
的变化:
在if(convertView == null)之后的布局和视图的SetId()以及其他部分
将onclicklistener更改为if之后(convertView == null)和其他部分
使用以下代码:
如果(intList.contains(holder.layout_selected.getId())){
holder.layout_selected.setVisibility(android.view.View.VISIBLE);
}else{
holder.layout_selected.setVisibility(android.view.View.INVISIBLE);
}