【问题标题】:OnChildClickListener not working in expandable listviewOnChildClickListener 在可扩展列表视图中不起作用
【发布时间】:2015-10-30 14:23:04
【问题描述】:

我不知道这段代码有什么问题,我的onChildClickListener() 没有被调用我已经看到一些答案,他们说覆盖isChildSelected 并返回true;我也试过了,但仍然没有被调用。任何人都可以在这方面帮助我。任何帮助,将不胜感激。谢谢。

public class Expand {
    Context context;

    private RelativeLayout relativeLayout;
    private String[] headerText;
    String[] secondHeaderTitle;
    int[] secondHeaderVisibilty;
    String[][] drdatewise;
    String[][] spec;
    ExpandableListView listView;
    ExampleAdapter adapter;

    public TextView secondHeader;

    public Expand(Context context, String headerText[],
            String[] secondHeaderTitle, int[] secondHeaderVisibilty,
            String[][] drdatewise, String[][] spec) {
        this.context = context;
        this.headerText = headerText;
        this.secondHeaderTitle = secondHeaderTitle;
        this.secondHeaderVisibilty = secondHeaderVisibilty;
        secondHeader = new TextView(context);
        this.drdatewise = drdatewise;
        this.spec = spec;

    }

    public View GetView() {

        List<GroupItem> items = new ArrayList<GroupItem>();

        // Populate our list with groups and it's children
        for (int i = 0; i < headerText.length; i++) {
            GroupItem item = new GroupItem();

            item.title = headerText[i];

            for (int j = 0; j < drdatewise[i].length; j++) {
                ChildItem child = new ChildItem();
                child.title1String = drdatewise[i][j];
                child.title2String = spec[i][j];
                child.title3String = "Class A";
                child.title4String = "Mumbai";
                item.items.add(child);
            }

            items.add(item);
        }
        adapter = new ExampleAdapter(context);
        adapter.setData(items);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        relativeLayout = (RelativeLayout) inflater.inflate(
                R.layout.activity_main_gb, null);

        listView = (ExpandableListView) relativeLayout
                .findViewById(R.id.listView);
        listView.setAdapter(adapter);
        listView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "Mine mine minemie n", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
        return relativeLayout;
    }

    private class ExampleAdapter extends BaseExpandableListAdapter {
        private LayoutInflater inflater;

        private List<GroupItem> items;
        View convertView;

        public ExampleAdapter(Context context) {
            inflater = LayoutInflater.from(context);
        }

        public void setData(List<GroupItem> items) {
            this.items = items;
        }

        @Override
        public ChildItem getChild(int groupPosition, int childPosition) {
            return items.get(groupPosition).items.get(childPosition);
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            ChildHolder holder;
            ChildItem item = getChild(groupPosition, childPosition);
            this.convertView = convertView;
            if (convertView == null) {
                holder = new ChildHolder();
                convertView = inflater.inflate(R.layout.child_view_cal, parent,
                        false);
                holder.title1 = (TextView) convertView
                        .findViewById(R.id.childtextview1);
                holder.title2 = (TextView) convertView
                        .findViewById(R.id.childtextview2);
                holder.title3 = (TextView) convertView
                        .findViewById(R.id.childtextview3);
                holder.title4 = (TextView) convertView
                        .findViewById(R.id.childtextview4);
                convertView.setTag(holder);

            } else {
                holder = (ChildHolder) convertView.getTag();
            }

            holder.title1.setText(item.title1String);
            holder.title2.setText(item.title2String);
            holder.title3.setText(item.title3String);
            holder.title4.setText(item.title4String);

            return convertView;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return items.get(groupPosition).items.size();
        }

        @Override
        public GroupItem getGroup(int groupPosition) {
            return items.get(groupPosition);
        }

        @Override
        public int getGroupCount() {
            return items.size();
        }

        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            GroupHolder holder;
            GroupItem item = getGroup(groupPosition);
            if (convertView == null) {
                holder = new GroupHolder();
                convertView = inflater.inflate(R.layout.parent_view_cal,
                        parent, false);
                holder.title = (TextView) convertView
                        .findViewById(R.id.headertextview);
                holder.patches = (TextView) convertView
                        .findViewById(R.id.headertextview2223);
                holder.count = (TextView) convertView
                        .findViewById(R.id.headertextview223);

                convertView.setTag(holder);
            } else {
                holder = (GroupHolder) convertView.getTag();
            }

            holder.title.setText(item.title);
            int countD = getChildrenCount(groupPosition);
            holder.count.setText("" + countD);
            holder.patches.setText("1");
            return convertView;
        }

        @Override
        public boolean hasStableIds() {
            return true;
        }

        @Override
        public boolean isChildSelectable(int arg0, int arg1) {
            return true;
        }

    }

    private static class GroupHolder {
        TextView title;
        TextView patches;
        TextView count;
    }

    private static class GroupItem {
        String title;
        String secondHeaderTitle;
        List<ChildItem> items = new ArrayList<ChildItem>();
    }

    private static class ChildItem {
        String title1String;
        String title2String;
        String title3String;
        String title4String;
    }

    private static class ChildHolder {
        TextView title1;
        TextView title2;
        TextView title3;
        TextView title4;
    }
}

子视图

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/upperlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#E3ECF5"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:paddingLeft="10dp"
            android:paddingTop="13dp" >

            <ImageView
                android:id="@+id/childImage"
                android:layout_width="58dp"
                android:layout_height="58dp"
                android:layout_gravity="left"
                android:src="@drawable/ic_account_box_black_48dp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:gravity="left"
            android:orientation="vertical"
            android:paddingBottom="10dp"
            android:paddingTop="10dp" >

            <TextView
                android:id="@+id/childtextview1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="Data1"
                android:textColor="#424242"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/childtextview2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="Data2"
                android:textColor="#424242"
                android:textSize="16sp"
                android:textStyle="normal" />

            <TextView
                android:id="@+id/childtextview3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="Data3"
                android:textColor="#424242"
                android:textSize="14sp"
                android:textStyle="normal" />

            <TextView
                android:id="@+id/childtextview4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="Data4"
                android:textColor="#424242"
                android:textSize="14sp"
                android:textStyle="normal" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:paddingLeft="10dp"
            android:paddingTop="13dp" >

            <TextView
                android:id="@+id/time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right|center_vertical"
                android:text="11:00" />
        </LinearLayout>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:layout_below="@+id/upperlayout"
        android:background="#FFFFFF" />

</RelativeLayout>

【问题讨论】:

  • 在设置监听器时尝试使用 ExpandableListView.OnChildClickListener() 吗?
  • Nope listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // TODO 自动生成的方法存根Toast.makeText(context, "Mine mine minemie n", Toast.LENGTH_SHORT).show(); return true; } });不工作。
  • 您的代码看起来不错,可以发布您的 child_view_cal.xml 文件吗?
  • 不知道为什么它不起作用。你的扩展课怎么了?为什么你的 ExpandableListView 不在扩展 Activity 或 Fragment 的类中?有什么特别的原因吗?
  • 不让我试试。

标签: android android-listview expandablelistview onclicklistener


【解决方案1】:

您的ImageView 和子布局中的TextViews 可能正在拦截点击事件。在您的 XML 中,尝试将 android:focusable="false" 添加到所有这些元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多