android - ExpandableListView 仅在特定 Button 上展开?

标签 android listview button expandablelistview expand

好吧,我正在尝试创建一个像 Spotify 那样的 ExpandableListView...但是我不知道如何禁用 LinearLayout 使其像按钮一样工作(展开列表)我创建了一个应该描述的图像我喜欢什么。我希望有可能将对文本/图像(父级)的点击作为正常交互进行处理。单击右键应该像在 Spotify 中一样展开列表...

First picture show the expand action (now), second show the expand action how it should be...

最佳答案

这是一个有点老的问题,但这个答案可能会对某人有所帮助。

如果你想通过点击特定的 Button 或其他一些 View 展开/折叠组,你必须在 getGroupView 中获取那个 Button Adapter 类中的方法。然后,在 ButtononClick 方法中,要么将 parent 转换为 ExpandableListView,要么传递 List 的创建适配器时在构造函数中引用。

我更喜欢第一种方法。这是代码,假设您有一个 TextView 和一个作为箭头的 ImageView。我也添加了更改箭头状态。

@Override
public View getGroupView(final int groupPosition, final boolean isExpanded,
        View convertView, final ViewGroup parent) {

    String headerTitle = (String) getGroup(groupPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.left_drawer_list_group, parent, false);
    }

    TextView listHeaderText = (TextView) convertView
            .findViewById(R.id.left_menu_list_header_text);
    ImageView listHeaderArrow = (ImageView) convertView.findViewById(R.id.left_menu_list_header_arrow);

    listHeaderText.setText(headerTitle);

    //Set the arrow programatically, so we can control it
    int imageResourceId = isExpanded ? android.R.drawable.arrow_up_float : android.R.drawable.arrow_down_float;
    listHeaderArrow.setImageResource(imageResourceId);

    listHeaderArrow.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if(isExpanded) ((ExpandableListView) parent).collapseGroup(groupPosition);
            else ((ExpandableListView) parent).expandGroup(groupPosition, true);

        }
    });

    return convertView;
}

此外,您希望在 onGroupClick 监听器中禁用展开/折叠。

@Override
public boolean onGroupClick(ExpandableListView parent, View v,
        int groupPosition, long id) {

    //Do some other stuff, but you shall not expand or collapse

    return true;
}

还有另一种方法,但相当糟糕,那就是将整个 Adapter 类复制到创建 ExpandableListView 并设置 Adapter 的类中。但不要那样做。 严重地! ;)

关于android - ExpandableListView 仅在特定 Button 上展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587973/

相关文章:

android - 杀死Android中的其他进程

android - 如何在 Android 后台监控电池电量?

ios - 如何在 iOS 中点击时更改自定义按钮的图像?

android - 如何通过java在gridview之间留出空间

java - RxJava : How to prepend startWith() default emit EVERY TIME parent observable emits?

android - 在 Android 中将视频播放到 ListView 中

java - ListView 长按后 AlertDialog 中的可点击选项

android - 使用 HashMap 的多列列表中的 nullPointerException

Android 以编程方式设置 Material 按钮顶部和底部插入(Java)

javascript - 少读按钮滚动页面