1

我的活动中有一个可以正常工作的 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 但不起作用。有人有什么想法吗?谢谢

4

1 回答 1

3

每次我以这种方式将客户适配器设置为可扩展列表视图时,我都解决了保存实例状态和恢复 Istance 状态的问题:

Parcelable state = myExpList.onSaveIstanceState();
myExpList.setAdapter(myAdapter);
myExpList.onRestoreIstanceState();

在我的方法 openGroup(int position) 之后

myExpList.expandGroup(position);
myExpList.setSelectedGroup(position);

我没有使用 setOnItemSelectedListener。

于 2012-12-06T19:53:14.437 回答