1

アクティビティにExpandableListViewがあり、正しく機能します。アダプターにRelativeLayoutのclickListenerを設定したので、それをクリックすると、グループが展開されます。私のグループリストはArrayListであり、私の子はHashMap>です。ここで、IntegerはArrayListのgroupPositionです。子は、すべてのユーザーが表示できるコメントリストです。ユーザーは、コメントリストの最後にEditTextでコメントを追加できます。私の目標は、groupViewがクリックした画面の上部に配置することです。私はこれをやろうとしましたが、私の問題は次のとおりです。

私の最初のグループには10のコメントがあります。最初のグループを展開すると、それらが表示され、クリックしたグループの位置が正しくなります。4番目のグループを展開しようとすると、最初のグループが既に展開されている場合、画面上のExpandableListViewの位置は、展開されたばかりの4番目のグループではなく、最初のグループの4番目の子に移動します。その後、リストを下にスクロールすると、4番目のグループが開いていますが、最初のグループの4番目の子ではなく、4番目のグループに配置します。コメントなしでグループのみを開くと、すべて正しく機能します...

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

次のようにして、カスタマーアダプタをExpandable ListViewに設定するたびに、インスタンス状態の保存と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 に答える