2015-08-16 77 views
0

我创建了可扩展列表,并且在每个项目中我有一个imageview。当用户点击imageview时,其资源应该更改为其他资源。例如当R.drawable.onalarm是,用户点击后应该改为R.drawable.offalarm。但是在团队崩溃之后。 imageview的资源返回到其以前的状态。我也更改可扩展列表的数据,但它不工作!这是我的清单适配器:折叠后更改了可扩展列表项目

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

我该怎么办? TNX

+1

你试过使用notifyDatasetChanged()吗? – Bhargav

+0

@Bhargav不,我没有尝试,现在我用它,工作正常。 TNX。输入您的评论作为答案 –

回答

0

尝试使用notifyDatasetChanged()更改后的权利图像

0

必须为ImageView的设置标签,并检查它... 真实的onalarm和虚假的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)); 
} 
}