在android中的onClick图标时,在Expandablelistview的子列表中更改图标

时间:2014-05-07 10:46:21

标签: android adapter expandablelistview

现在我在android中使用ExpandableListview。 在ExpabdableListview中,GroupHeader包含一个textview。 和Child包含一个Textview和一个Button。 在按钮我有setbackground白星。

我还使用BaseExpandableListAdapter类在expandablelistview中设置数据。

我的问题

当按钮背景改变的时候点击特定的子列表按钮时。白色到黄色。

请有人知道改变特定按钮的颜色吗?

先谢谢你。

1 个答案:

答案 0 :(得分:0)

如果您的问题中没有任何代码,很难回复,但想法可能如下:

  • 在适配器中,维护“已点击”子项列表;
  • getChildView()中检查是否单击了项目并设置了正确的背景图像;

示例代码如下所示:

// for ViewHolder pattern
private static class ViewHolder {
    // Child item views
    public Button button;

    public long combinedId;
}

private static class ExpandableAdapter extends BaseExpandableListAdapter implements View.OnClickListener {

    private LongSparseArray<Boolean> mClickedItems = new LongSparseArray<Boolean>();

    @Override
    public View getChildView(final int groupPosition, final int childPosition, final boolean isLastChild, final View convertView, final ViewGroup parent) {
        View view = convertView;
        ViewHolder holder = null;

        if (view == null) {
            // Inflate child view

            holder = new ViewHolder();
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        holder.combinedId = getCombinedChildId(groupPosition, childPosition);
        holder.button.setOnClickListener(this);

        if (mClickedItems.get(holder.combinedId, false)) {
            holder.button.setBackgroundResource(R.drawable.not_clicked_background);
        } else {
            holder.button.setBackgroundResource(R.drawable.clicked_background);
        }

        return null;
    }

    @Override
    public void onClick(final View v) {
        final long id = ((ViewHolder)v.getTag()).combinedId;
        Boolean clicked = mClickedItems.get(id);

        if (clicked == null) {
            clicked = true;
        } else {
            clicked = !clicked;
        }

        mClickedItems.append(id, clicked);
    }

    // Rest of adapter
}

此外,使用ToogleButton代替普通按钮可能更好。