アクティビティに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も実装しようとしましたが、機能しません。誰かが何か考えを持っていますか?ありがとう