我有自定义的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;
答案 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;
}