onclicklistener for listview row with multiple items

时间:2014-05-14 12:55:20

标签: android android-listview expandablelistview onclicklistener listviewitem

我有一个可扩展的列表视图的自定义adpater。可扩展列表视图的每个子项都有多个项目,我想为每个项目设置一个单击侦听器。

当我设置clicklistener时,总是需要两次单击才能让项目执行任务。第一次单击选择整行,然后第二次单击执行它需要执行的操作。我该如何防止这种情况?这是代码:

  

myList.setOnChildClickListener(new OnChildClickListener(){

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

                    final int grp = groupPosition;
                    final int chdp = childPosition;


                    TextView txt = (TextView) v.findViewWithTag("title");
                    txt.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {

                            child = myFolderlist.getArray().get(grp)
                                    .get(chdp);
                            goToItem(child, none, all, false);

                        }
                    });

我已尝试在适配器中设置clicklistener,但无法从适配器访问我要运行的代码。我还在布局中设置了onclick,但这使我无法获得groupPosition和childPosition,因为它完全忽略了clicklistener。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在ListView的onClick方法中为TextView设置OnClickListener时,第一次单击将设置TextView - OnClickListener,第二次单击将调用该侦听器。

一种可能的解决方案是在设置TextView的OnClickListener后调用txt.performClick

答案 1 :(得分:0)

我假设您只想在单击TextView时完成点击?

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

                final int grp = groupPosition;
                final int chdp = childPosition;


                TextView txt = (TextView) v.findViewWithTag("title");
                txt.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        child = myFolderlist.getArray().get(grp)
                                .get(chdp);
                        goToItem(child, none, all, false);

                    }
                });
                txt.performClick();
             }

否则整个孩子应该初始化工作:

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

            final int grp = groupPosition;
            final int chdp = childPosition;

            child = myFolderlist.getArray().get(grp)
                            .get(chdp);
            goToItem(child, none, all, false);

         }