我的活动中有一个可以正常工作的 ExpandableListView。我在我的适配器中在RelativeLayout 上设置了一个clickListener,所以当我点击它时,我的组得到扩展。我的组列表是 ArrayList,我的孩子是 HashMap> 其中 Integer 是 ArrayList 的 groupPosition。Children 是任何用户都可以看到的评论列表。用户可以通过 EditText 在评论列表末尾添加评论。我的目标是将 groupView 点击的屏幕顶部定位。我试图这样做,但我的问题是:
我的第一组有 10 条评论。如果我展开第一组,我可以看到它们,并且单击的组的位置是正确的。如果我尝试展开我的第四组,当第一个已经展开时,我屏幕上的 ExpandableListView 位置转到第一组的第四个孩子,而不是刚刚展开的第四组。如果我向下滚动列表后,第四组是打开的,但我会定位在第四组而不是第一组的第四个孩子。如果我只打开没有评论的组,一切都会正常工作......
getGroupView 方法的一小部分:
scanCommFav=(RelativeLayout)v.findViewById(R.id.feedcell_scancommentfavorite);
scanCommFav.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
if(!isExp)
{
if(mess==0)
{
setIdx(idx);
addIndex(idx);
getCommentNoList();
}
else
{
callCommentScript(snapId);
setIdx(idx);
addIndex(idx);
}
}
else if(isExp)
{
setIdx(idx);
removeIndex(idx);
closeGroup(idx);
}
}
});
addIndex(idx) 和removeIndex,添加和删除LinkedList 中打开的组的位置。setIdx(idx) 将我用于不同目的的组位置设置为 int 变量。
这是 openGroup():
private void openGroup(int pos)
{
feedlistView.setSelectedGroup(pos);
}
这是closeGroup():
private void closeGroup(int idx)
{
feedlistView.collapseGroup(idx);
}
这是我的听众:
feedlistView.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View view,int position, long id) {
if(ExpandableListView.getPackedPositionForGroup(position)==ExpandableListView.PACKED_POSITION_TYPE_GROUP)
{
int pos = feedlistView.getSelectedItemPosition();
feedlistView.expandGroup(pos);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
我也尝试实现 setOnGroupClickListener 但不起作用。有人有什么想法吗?谢谢