繁体   English   中英

在可扩展列表中以编程方式扩展组行

[英]Expand group row programmatically in expandable list

我正在使用可扩展列表视图。 无论如何我可以在单击内部图像时扩展组行吗? 我知道要让图像响应点击,我必须设置它的焦点。 现在,一旦此图像响应单击(在我的自定义适配器内),我如何以编程方式展开/折叠它所属的特定组行?

谢谢

在适配器中

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 Override onImageSelected

@Override
public void onImageSelected(int groupPos){
    if(expandableList.isGroupExpanded(groupPos)){
        expandableList.collapseGroup(groupPos);
    }else{
        expandableList.expandGroup(groupPos);
    }
}

一个更简单的方法:

  1. 在适配器构造函数中传递对ExpandableListView的引用;
  2. 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;
}

在您的 Activity onCreate()或 Fragment 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM