折叠后可扩展列表项发生变化
expandable list items changed after collapsing
我创建了一个可扩展列表,在每个项目中我都有一个 imageview
。当用户单击 imageview
时,其资源应更改为另一个资源。例如,当 R.drawable.onalarm
是它时,在用户单击后它应该更改为 R.drawable.offalarm
。但是在团灭之后。 imageview returns 的资源恢复到之前的状态。我还更改了可扩展列表的数据,但它不起作用!这是我的列表适配器:
private LayoutInflater inflater;
private List<GroupItem> items;
public void setData(List<GroupItem> items)
{
this.items = items;
}
@Override
public View getRealChildView( final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final ChildHolder holder;
ChildItem item = getChild(groupPosition, childPosition);
if (convertView == null) {
holder = new ChildHolder();
convertView = inflater.inflate(R.layout.list_item, parent, false);
holder.title = (TextView) convertView.findViewById(R.id.textTitle);
holder.alarm = (ImageView) convertView.findViewById(R.id.alarm_imageview);
} else {
holder = (ChildHolder) convertView.getTag();
}
holder.title.setText(item.title);
holder.alarm.setImageResource(item.alarmid);
holder.alarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView iv = (ImageView) v;
if(iv.getDrawable().getConstantState().equals
(getResources().getDrawable(R.drawable.onalarm).getConstantState())) {
iv.setImageResource(R.drawable.offalarm);
items.get(groupPosition).items.get(childPosition).alarmid = R.drawable.offalarm;
setData(items);
}
else {
iv.setImageResource(R.drawable.onalarm);
items.get(groupPosition).items.get(childPosition).alarmid = R.drawable.onalarm;
setData(items);
}
}
});
return convertView;
}
我该怎么办?
发送
您必须为 ImageView 设置标签并检查它...
true onalarm 和 false for offalarm....
试试这个:
boolean clicked = new Boolean(false);
iv.setTag(clicked);
public void onClick(View v) {
if( ((Boolean)iv.getTag())==false ){
iv.setImageResource(R.drawable.onalarm);
iv.setTag(new Boolean(true));
}
else
{
iv.setImageResource(R.drawable.offalarm);
iv.setTag(new Boolean(false));
}
}
尝试在更改图像后立即使用 notifyDatasetChanged()
我创建了一个可扩展列表,在每个项目中我都有一个 imageview
。当用户单击 imageview
时,其资源应更改为另一个资源。例如,当 R.drawable.onalarm
是它时,在用户单击后它应该更改为 R.drawable.offalarm
。但是在团灭之后。 imageview returns 的资源恢复到之前的状态。我还更改了可扩展列表的数据,但它不起作用!这是我的列表适配器:
private LayoutInflater inflater;
private List<GroupItem> items;
public void setData(List<GroupItem> items)
{
this.items = items;
}
@Override
public View getRealChildView( final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final ChildHolder holder;
ChildItem item = getChild(groupPosition, childPosition);
if (convertView == null) {
holder = new ChildHolder();
convertView = inflater.inflate(R.layout.list_item, parent, false);
holder.title = (TextView) convertView.findViewById(R.id.textTitle);
holder.alarm = (ImageView) convertView.findViewById(R.id.alarm_imageview);
} else {
holder = (ChildHolder) convertView.getTag();
}
holder.title.setText(item.title);
holder.alarm.setImageResource(item.alarmid);
holder.alarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView iv = (ImageView) v;
if(iv.getDrawable().getConstantState().equals
(getResources().getDrawable(R.drawable.onalarm).getConstantState())) {
iv.setImageResource(R.drawable.offalarm);
items.get(groupPosition).items.get(childPosition).alarmid = R.drawable.offalarm;
setData(items);
}
else {
iv.setImageResource(R.drawable.onalarm);
items.get(groupPosition).items.get(childPosition).alarmid = R.drawable.onalarm;
setData(items);
}
}
});
return convertView;
}
我该怎么办? 发送
您必须为 ImageView 设置标签并检查它... true onalarm 和 false for offalarm.... 试试这个:
boolean clicked = new Boolean(false);
iv.setTag(clicked);
public void onClick(View v) {
if( ((Boolean)iv.getTag())==false ){
iv.setImageResource(R.drawable.onalarm);
iv.setTag(new Boolean(true));
}
else
{
iv.setImageResource(R.drawable.offalarm);
iv.setTag(new Boolean(false));
}
}
尝试在更改图像后立即使用 notifyDatasetChanged()