【问题标题】:How can I set LongClick on group in ExpandableListView [Android]如何在 ExpandableListView [Android] 中设置 LongClick 组
【发布时间】:2015-04-18 03:38:38
【问题描述】:

我有一个 ExanpdableLisView,我必须为孩子实现 setOnChildClickListener 方法,为组/父实现“LongClick”。

我给孩子穿了一个,但我不知道如何实现 LongClick。

这是setOnChildClickListener的代码

expListView.setOnChildClickListener(new OnChildClickListener() {

            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                RosterEntry rentry = (RosterEntry) exListAdapter.getChild(groupPosition, childPosition);
                final String selected = rentry.getName();
                //Change Toast to make the new functionality
                Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG).show();

                return true;
            }
        });

但我不知道如何在 Group/parent 上进行 LongClick。

【问题讨论】:

标签: java android android-listview expandablelistview


【解决方案1】:

对于长按组或子视图,

getExpandableListView().setOnItemLongClickListener(new OnItemLongClickListener() {

    Override   
    public boolean onItemLongClick( AdapterView<?> parent, View view, int position, long id) {

        long packedPosition = m_expandableListView.getExpandableListPosition(position);

        int itemType = ExpandableListView.getPackedPositionType(packedPosition); 
        int groupPosition = ExpandableListView.getPackedPositionGroup(packedPosition);
        int childPosition = ExpandableListView.getPackedPositionChild(packedPosition);


        /*  if group item clicked */
        if (itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
            //  ...
            onGroupLongClick(groupPosition);
        }

        /*  if child item clicked */
        else if (itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
            //  ...
            onChildLongClick(groupPosition, childPosition);
        }


        return false;
    }
});

定义 onGroupLongClick()onChildLongClick() 方法来做任何你想做的事情。

试试这个。这将起作用。

【讨论】:

  • 工作完美。谢谢!
  • 你知道这里的id参数代表什么吗?它与您从OnChildClickListener.onChildClick() 中的id 参数获得的值不同。
【解决方案2】:

这并不是最干净的解决方案,但在您的适配器中,您可以在 getGroupView 方法中为每个视图创建时注册一个 onLongClick 侦听器。

public override View GetGroupView(int groupPosition, boolean isExpanded,
                                 View convertView, ViewGroup parent) {
     if(converView == null)
     {
        View view = new View(context);
        view.setOnLongClickListener(new OnLongClickListener() {
            public boolean onLongClick(View v)
            {     
                //enter code here
            }
        });
     }

}

希望对你有帮助!

【讨论】:

  • 谢谢@jonte,也许这可以在未来帮助我,根据点击的组有不同的“反应”,让主代码更干净^^。 Zygoltelnit 的答案很完美
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
相关资源
最近更新 更多