亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android ExpandableListView長按事件的完美解決辦法

2020-04-11 12:11:26
字體:
來源:轉載
供稿:網友
關于ExpandableListView長按事件處理,網上很多都是使用將上下文菜單注冊到ExpandableListView上實現長按事件。

這樣做弊端顯而易見,不夠靈活,不能分別對父項、子項、父項之間、子項之間彈出內容做區分。
下面來說我的解決方法,方法有點投機取巧。首先說明一點,使用我這種方法必須使用自定義的BaseExpandableListAdapter,至于為什么,具體后面講到。

ExpandableListView本身有繼承自AdapterView的setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener)方法。
實現監聽器:
復制代碼 代碼如下:

/**
  * 長按郵箱快捷選項
  * @author King
  */
 private class QuickWayListener implements OnItemLongClickListener{
  @Override
  public boolean onItemLongClick(AdapterView<?> arg0, View view,
    int pos, long id) {
   //pos不可用說明見下文
   return false;
  }
 }

如果這個方法是用在ListView長按事件中剛剛好,但在ExpandableListView中,第三個參數pos不能區分開點擊的是父項還是子項,以及哪個父項或子項。

在ExpandableListView響應的onItemLongCkick方法中,pos參數值為:從上到下,父項+展現的子項到點擊位置的數目(注意:是展現的,隱藏的子項不包括,從0開始)。
例如:
父項1(隱藏3個子項)
父項2
 |―子項2-0
 |―子項2-1
 |―子項2-2
長按子項2-1時,pos值為3。顯然根據pos值是無法確定點擊的是哪個子項或父項的。
因此依賴pos是很難處理點擊位置的。

如果可以直接在onItemLongClick方法中獲取groupPos,及childPos該多好呢?

于是看到了onItemLongClick方法第二個參數:view。這里的view是你按中的位置對應的view。view有個方法getTag(int key)。如果在創建此view的時候就把groupPos,childPos通過setTag(int key, Object value)設置進去,在響應onItemLongClick不就可以直接拿出來用了么。

現在就要講到必須使用自定義的BaseExpandableListAdapter的理由了。

要把groupPos,childPos通過setTag的方式綁定到view中,就必須操作該view的創建過程。要控制這個過程就必須要在自定義BaseExpandableListAdapter中重寫getGroupView及getChildView方法進行操作。如下:
復制代碼 代碼如下:

public class AccountListAdapter extends BaseExpandableListAdapter {
 ...省略其他方法
 @Override
 public View getChildView(int groupPosition, int childPosition,
   boolean isLastChild, View convertView, ViewGroup parent) {
  //我這里僅通過自己寫的mkChildView()方法創建TextView來顯示文字,更復雜的可以通過LayoutInflater來填充一個view
  TextView childTv = mkChildView();
  // 標記位置
  // 必須使用資源Id當key(不是資源id會出現運行時異常),android本意應該是想用tag來保存資源id對應組件。
  // 將groupPosition,childPosition通過setTag保存,在onItemLongClick方法中就可以通過view參數直接拿到了!
                childTv.setTag(R.id.xxx01, groupPosition);
  childTv.setTag(R.id.xxx02, childPosition);
  return childTv;
 }
 @Override
 public View getGroupView(int groupPosition, boolean isExpanded,
   View convertView, ViewGroup parent) {
  TextView groupTv = mkGroupView();
  // 設置同getChildView一樣
  groupTv.setTag(R.id.xxx01, groupPosition);
  groupTv.setTag(R.id.xxx02, -1); //設置-1表示長按時點擊的是父項,到時好判斷。
  groupTv.setText(groups[groupPosition]);
  return groupTv;
 }
}

完成了這一步,我們只需要在ExpandableListView響應的onItemLongClick方法時通過view.getTag(R.id.xxx01),view.getTag(R.id.xxx02)即可拿到groupPos,childPos.
如下:
復制代碼 代碼如下:

       /**
  * 長按郵箱快捷選項
  * @author King
  */
 private class QuickWayListener implements OnItemLongClickListener{
  @Override
  public boolean onItemLongClick(AdapterView<?> arg0, View view,
    int pos, long id) {
   int groupPos = (Integer)view.getTag(R.id.xxx01); //參數值是在setTag時使用的對應資源id號
   int childPos = (Integer)view.getTag(R.id.xxx02);
   if(childPos == -1){//長按的是父項
       //根據groupPos判斷你長按的是哪個父項,做相應處理(彈框等)
   } else {
       //根據groupPos及childPos判斷你長按的是哪個父項下的哪個子項,然后做相應處理。 
   }
   return false;
  }
 }

到這就寫完了,貌似比較亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频精品va久久久久久| 欧美久久久精品| 668精品在线视频| 精品欧美aⅴ在线网站| 97超级碰碰人国产在线观看| 欧美激情欧美激情| 久久久久久18| 日韩在线观看高清| 国产丝袜精品视频| 国产91精品青草社区| 日韩极品精品视频免费观看| 亚洲美女视频网| 亚洲日本成人女熟在线观看| 亚洲国产精品视频在线观看| 97久久久久久| 欧美自拍大量在线观看| 国产精品成人国产乱一区| 国产精品久久久久久久久免费| 日韩毛片在线观看| 久久久精品久久| 久久久久久午夜| 青青久久av北条麻妃海外网| 丝袜情趣国产精品| 尤物tv国产一区| 精品国产1区2区| 国产一区香蕉久久| 97久久精品在线| 欧美成人免费在线观看| 欧美亚洲国产日韩2020| 亚洲伊人第一页| 九九热这里只有精品6| 国产精品手机播放| 亚洲精品www| 日韩美女福利视频| 欧洲午夜精品久久久| 九九视频这里只有精品| 久久久久久久久久久人体| 亚洲自拍在线观看| 国产成人自拍视频在线观看| 亚洲欧美日韩天堂| 色噜噜狠狠狠综合曰曰曰88av| 成人午夜一级二级三级| 伊是香蕉大人久久| 久久精品一区中文字幕| 日韩亚洲在线观看| 日韩美女免费视频| 91性高湖久久久久久久久_久久99| 日韩欧美在线国产| 亚洲在线免费观看| 亚洲美女免费精品视频在线观看| 国产日韩在线亚洲字幕中文| 国产精品99久久99久久久二8| 国产精品99久久久久久久久久久久| 久久亚洲精品网站| 黄色一区二区在线观看| 成人写真福利网| 亚洲一区二区三区乱码aⅴ| 最新69国产成人精品视频免费| 色综合色综合久久综合频道88| 亚洲 日韩 国产第一| 日韩国产高清视频在线| 久久久久成人网| 久久91精品国产91久久跳| 国产精品欧美日韩一区二区| 国产欧美一区二区三区视频| 欧美成人三级视频网站| 成人性生交大片免费看小说| 国产美女91呻吟求| 日韩成人在线观看| 久久久久久九九九| 国产69精品久久久久99| 91欧美精品午夜性色福利在线| 欧美成人自拍视频| 影音先锋欧美在线资源| 成人久久久久久| 久久免费精品视频| 国产日韩欧美中文| 久久全球大尺度高清视频| 欧美有码在线观看视频| 日韩免费av一区二区| 国产精品国产福利国产秒拍| 欧美精品aaa| 92看片淫黄大片看国产片| 91免费精品视频| 亚洲精品美女网站| 国产日产欧美精品| 在线亚洲国产精品网| 亚洲成人精品视频| 亚洲丝袜av一区| 97精品伊人久久久大香线蕉| 国产精品99久久久久久白浆小说| 亚洲wwwav| 国产精品久久久久久中文字| 欧美激情视频一区二区三区不卡| 日韩免费看的电影电视剧大全| 视频一区视频二区国产精品| 久久久久久久久久久人体| 亚洲福利视频免费观看| 亚洲天堂免费在线| 久久精品国产欧美激情| 久久乐国产精品| 久久久久久中文| 亚洲视频电影图片偷拍一区| 国产999精品久久久| 日韩在线观看免费高清| 68精品国产免费久久久久久婷婷| 亚洲精品国产精品自产a区红杏吧| 亚洲最大的成人网| 青青久久aⅴ北条麻妃| 国产精品白丝jk喷水视频一区| 欧美性xxxx极品hd满灌| 国产精品欧美日韩| 精品自拍视频在线观看| 成人免费午夜电影| 九九热这里只有精品6| 亚洲精品美女久久久| 国产精品爽爽爽| 亚洲欧美一区二区三区情侣bbw| 亚洲欧美日韩天堂一区二区| 日韩欧美亚洲国产一区| 日韩精品在线观看网站| 精品久久久一区二区| 第一福利永久视频精品| 在线国产精品播放| 国产精品久久久亚洲| 亚洲欧美综合精品久久成人| 亚洲人成人99网站| 国产欧洲精品视频| 亚洲性av在线| 亚洲自拍偷拍一区| 裸体女人亚洲精品一区| 国产精品精品视频一区二区三区| 国产福利精品av综合导导航| 91久久国产精品91久久性色| 97视频在线免费观看| 亚洲伊人成综合成人网| 最近2019中文字幕一页二页| 国产精品网站视频| 日韩精品视频在线| 国模极品一区二区三区| 国产香蕉精品视频一区二区三区| 国产精品午夜一区二区欲梦| 日本精品一区二区三区在线播放视频| 欧洲亚洲免费视频| 日本老师69xxx| 欧美精品videossex性护士| 欧美性猛交xxxx免费看漫画| 欧美午夜精品伦理| 欧美成人精品h版在线观看| 尤物99国产成人精品视频| 久久亚洲精品视频| 日韩av网站电影| 国产精品视频1区| 国产成人精品a视频一区www| 一区二区三区www| 亚洲精品福利免费在线观看| 91香蕉国产在线观看| 91久久久国产精品| 久久久国产在线视频| 国产精品一区二区久久国产| 国内外成人免费激情在线视频网站| 精品久久久久久国产91| 激情成人中文字幕| 国产精品国产三级国产专播精品人|