在ExpandableListView上使用OnGroupClickListener不更新自定义视图

时间:2011-03-21 01:09:33

标签: android expandablelistview

我有自定义的groupView,它们在展开和折叠时需要更改状态。 如果展开相同的组视图,则会在两个状态之间切换。

我遇到的问题是expand方法似乎提升了一些缓存版本的视图,因为在调用expandGroup后我的更新不可见。

如果我的侦听器返回true(处理整个事件本身)而不调用expandGroup,则会发生更新。所以expandGroup发生了一些事情,它只允许绘制缓存视图。 我尝试过无效()几乎所有事情。我尝试在列表视图上触发数据更新事件。我也尝试了所有其他的东西:

expandableList.setGroupIndicator(null);
        expandableList.setAlwaysDrawnWithCacheEnabled(false);
        expandableList.setWillNotCacheDrawing(true);
        expandableList.setItemsCanFocus(false);

其中任何一个都没有运气:(

这是我的onClick代码:

expandableList.setOnGroupClickListener(new OnGroupClickListener() {

            public boolean onGroupClick(ExpandableListView parent, View v,
                    int groupPosition, long id) {
                MusicTrackRow mt = (MusicTrackRow) v;

                if (mt.isPlaying == true) {
                    mt.setPaused();
                } else {
                    mt.setPlaying();
                }
                mt.invalidate();
                parent.invalidate();
                trackAdapter.notifyDataSetInvalidated();
//need to call expandGroup if the listener returns true.. if returning false expandGroup is //returned automatically
                                expandableList.expandGroup(groupPosition); //no view refresh
                    return true;

1 个答案:

答案 0 :(得分:5)

终于找到了解决方案!

展开可扩展列表时,将对列表中的每个组调用适配器中的getGroupview。 这是您想要进行更改的地方。 isExpanded参数允许您确定扩展哪个组视图。

然后你可以做这样的事情:

public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        View v;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) getBaseContext()
                    .getSystemService(LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.expandablelistitem, null);

        } else {
            v = convertView;
        }
        int id = (!isExpanded) ? R.drawable.list_plus_selector
                : R.drawable.list_minus_selector;

        TextView textView = (TextView) v.findViewById(R.id.list_item_text);
        textView.setText(getGroup(groupPosition).toString());

        ImageView icon = (ImageView) v.findViewById(R.id.list_item_icon);

        icon.setImageResource(id);
        return v;

    }