我只是找到了一個解決辦法,以防止系統顯示此錯誤的行爲。
有兩種方案使用SectionIndexer
不同的代碼來工作。
第一種情況是您使用FastScrollbar-Thumb導航到下一部分的情況。假設羣體是你的部分的重寫的方法實現SectionIndexer
看起來就像是:
@Override
public int getPositionForSection(int section) {
return section;
}
// Gets called when scrolling the list manually
@Override
public int getSectionForPosition(int position) {
return ExpandableListView.getPackedPositionGroup(
expandableListView
.getExpandableListPosition(position));
}
第二種情況是,你手動滾動列表中的情況和快速滾動條移動根據部分,不所有項目。因此,代碼看起來像這樣:
@Override
public int getPositionForSection(int section) {
return expandableListView.getFlatListPosition(
ExpandableListView.getPackedPositionForGroup(section));
}
// Gets called when scrolling the list manually
@Override
public int getSectionForPosition(int position) {
return ExpandableListView.getPackedPositionGroup(
expandableListView
.getExpandableListPosition(position));
}
人們可以看到這兩種行爲都離不開進一步普及一起玩。
使兩者都起作用的解決方法是在每個人滾動一次(即通過觸摸進行滾動)的情況下處理這種情況。這可以實現OnScrollListener
接口與適配器類來完成,並將其設置到ExpandableListView
:
public class MyExpandableListAdapter extends BaseExpandableListAdapter
implements SectionIndexer, AbsListView.OnScrollListener {
// Your fields here
// ...
private final ExpandableListView expandableListView;
private boolean manualScroll;
public MyExpandableListAdapter(ExpandableListView expandableListView
/* Your other arguments */) {
this.expandableListView = expandableListView;
this.expandableListView.setOnScrollListener(this);
// Other initializations
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
this.manualScroll = scrollState == SCROLL_STATE_TOUCH_SCROLL;
}
@Override
public void onScroll(AbsListView view,
int firstVisibleItem,
int visibleItemCount,
int totalItemCount) {}
@Override
public int getPositionForSection(int section) {
if (manualScroll) {
return section;
} else {
return expandableListView.getFlatListPosition(
ExpandableListView.getPackedPositionForGroup(section));
}
}
// Gets called when scrolling the list manually
@Override
public int getSectionForPosition(int position) {
return ExpandableListView.getPackedPositionGroup(
expandableListView
.getExpandableListPosition(position));
}
// Your other methods
// ...
}
那固定的bug我。
列表中的行是否有不同的大小? – 2011-04-06 23:11:32
你能....請........張貼您的XML – Rockin 2011-05-25 06:09:51
張貼您的代碼/ xml – 2012-04-03 21:48:01