天天看點

Android中ExpandableListView的使用(二)

相關文章:

Android中ExpandableListView常用屬性總結

Android中ExpandableListView的使用(一)

最近翻看Android關于ExpandableListView的文檔,發現了幾個很有用的方法,在上一篇文章中沒有提及,是以新開了一篇文章來補充一下。

首先是接口部分

Android中ExpandableListView的使用(二)

除了可以設定子類被點選的監聽器外,還可以設定父類被點選的監聽器,以及一個清單展開和收起的監聽器

接下來看一下具體的方法

收起某一個清單,參數為父類第幾項,如果是要收起第一個清單,那麼groupPos = 0. 如果這個清單已經收起了,傳回值為false,表示收起失敗,因為清單已經收起了。如果這個清單還沒有收起,那麼收起這個清單,傳回值為true。

Android中ExpandableListView的使用(二)

展開清單的用法和收起清單的用法一樣,如果清單已經展開,傳回false,如果清單還沒有展開,傳回true。

Android中ExpandableListView的使用(二)

關于清單的展開還有一個方法

Android中ExpandableListView的使用(二)

比上一個方法多了一個參數,如果把這個參數設定為true,清單展開的時候會有動畫效果,該方法需在API大于等于14的時候才可以用

用于判斷清單是否展開的方法

Android中ExpandableListView的使用(二)

清單已展開,傳回true;清單未展開,傳回false

上一篇文章中已經提到了為子類的點選事件設定監聽器的方法,這裡講一下為父類點選事件,清單收縮事件,清單展開事件設定監聽器的方法

為父類的點選事件設定監聽器

listview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
    @Override
    public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
        if (listview.isGroupExpanded(i)) {
            listview.collapseGroup(i);
        } else {
            listview.expandGroup(i, true);
        }
        return true;
    }
});
           

上面的代碼實作的效果是當父類被點選時,判斷清單是否展開,如果沒有展開的話就展開清單,如果清單已經展開,那麼收起清單

為清單收縮事件和展開事件設定監聽器

listview.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
    @Override
    public void onGroupCollapse(int i) {
        Toast.makeText(ExpandableListViewTestActivity.this, "第" + i + "個清單收縮了", Toast.LENGTH_SHORT).show();
    }
});
           
listview.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
    @Override
    public void onGroupExpand(int i) {
        Toast.makeText(ExpandableListViewTestActivity.this, "第" + i + "個清單伸展了", Toast.LENGTH_SHORT).show();
    }
});
           

如果需要進入的時候清單就展開,然後不再收起,可以這樣設定:

在setAdapter之後周遊每一個清單使它們展開

for (int i = 0; i < parentList.length; i++) {
     if (!listview.isGroupExpanded(i)) {
        listview.expandGroup(i);
    }
}
           

然後設定父類的監聽器直接傳回true即可,不可以設定父類的監聽器為null,那樣起不到屏蔽原先系統設定的監聽器的效果

listview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
    @Override
    public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
        return true;
    }
});