私はexpandablelistviewを使用しています。とにかく、中の画像をクリックしたときにグループ行を展開できますか?画像がクリックに反応するようにするには、フォーカスを設定する必要があることを知っています。さて、この画像がクリックに応答したら(私のカスタムアダプタ内)、それが属する特定のグループ行をプログラムで展開/折りたたむにはどうすればよいですか?
ありがとうございました
私はexpandablelistviewを使用しています。とにかく、中の画像をクリックしたときにグループ行を展開できますか?画像がクリックに反応するようにするには、フォーカスを設定する必要があることを知っています。さて、この画像がクリックに応答したら(私のカスタムアダプタ内)、それが属する特定のグループ行をプログラムで展開/折りたたむにはどうすればよいですか?
ありがとうございました
アダプター内
private OnItemSelectedListener onItemSelectedCallback;
public interface OnItemsSelectedListener {
public void onImageSelected(int groupPos);
}
public YourAdapter(Context context) {
try {
this.onItemSelectedCallback = (OnItemSelectedListener ) context;
}
catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnItemSelectedListener ");
}
}
これをgetView()に追加します
ImageView imageView = new ImageView();
imageView.setTag(R.id.tagGroupPosition, groupPosition);
imageView.setOnClickListener(onClickListener);
これをOnClickListenerに追加します
OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
int groupPos = ((ImageView) v).getTagId(R.id.tagGroupPosition);
onItemSelectedCallback.onImageSelected(groupPos);
}
}
次に、アクティビティでYourAdapter.OnItemsSelectedListenerを実装する必要がありますオーバーライドonImageSelected
@Override
public void onImageSelected(int groupPos){
if(expandableList.isGroupExpanded(groupPos)){
expandableList.collapseGroup(groupPos);
}else{
expandableList.expandGroup(groupPos);
}
}
より簡単な方法:
ExpandableListView
アダプタコンストラクタでへの参照を渡します。getGroupView
追加して、単に呼び出すOnClickListener
listView.expandGroup(position);
例:
public class YourAdapter extends BaseExpandableListAdapter {
private ExpandableListView listView;
public ReportsAdapter(ExpandableListView listView) {
this.listView = listView;
}
//...
@Override
public View getGroupView(final int position, boolean isExpanded, View convertView, ViewGroup parent) {
ParentViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.your_item, parent, false);
holder = new ParentViewHolder();
//... holder logic
holder.btnExpand = convertView.findViewById(R.id.btn_expand);
convertView.setTag(holder);
} else {
holder = (ParentViewHolder) convertView.getTag();
}
//..holder logic
holder.btnExpand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listView.expandGroup(position);
}
});
return convertView;
}
あなたのアクティビティonCreate()
またはフラグメントonCreateView()
に
ExpandableListView listView = (ExpandableListView) view.findViewById(R.id.expandable_list_view);
mAdapter = new YourAdapter(listView);
listView.setAdapter(mAdapter);
これはOPからの質問に答えることはできませんが、アダプターがアイテムをロードした後でのみ、プログラムでグループを拡張する方法を探すことになりました。ここで私の修正です。
MyAdapter adapter = new MyAdapter(this, viewModel);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
if (adapter.getGroupCount()>0) {
binding.expandableListView.expandGroup(0);
}
}
});
binding.expandableListView.setAdapter(adapter);