天天看點

關于ExpandableListView的一個小例子

喜歡顯示好友QQ那樣的清單,可以展開,可以收起,在android中,以往用的比較多的是listview,雖然可以實作清單的展示,但在某些情況下,我們還是希望用到可以分組并實作收縮的清單,那就要用到android的ExpandableListView,今天研究了一下這個的用法,也參考了很多資料動手寫了一個小demo,實作了基本的功能,但界面優化方面做得還不夠好,有待改進,素材采用了Q版三國殺武将的圖檔,很有愛哈哈,下面直接上效果圖以及源代碼~!

關于ExpandableListView的一個小例子
關于ExpandableListView的一個小例子
關于ExpandableListView的一個小例子

main.xml的布局很簡單啦,隻是一個ExpandableListView 就OK了

但值得簡單說下的是android:cacheColorHint="#00000000",這個設定可以去除拖動view時背景變成黑色的效果

android:listSelector="#00000000" ,可以去除選中時的黃色底色

1<?xmlversion="1.0"encoding="utf-8"?>

2<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

3android:layout_width="fill_parent"

4android:layout_height="fill_parent"

5android:orientation="vertical">

6<ExpandableListView

7android:id="@+id/list"

8android:layout_width="fill_parent"

9android:layout_height="fill_parent"

10android:background="#ffffff"

11android:cacheColorHint="#00000000"

12android:listSelector="#00000000"

13>

14 </ExpandableListView>

15 </LinearLayout>

16

java代碼:

package com.eyu.activity_test;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.ExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

public class ExpandableList extends Activity{

protected void onCreate(BundlesavedInstanceState){

// TODOAuto-generatedmethodstub

super .onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.main);

final ExpandableListAdapteradapter= new BaseExpandableListAdapter(){

// 設定組視圖的圖檔

int []logos= new int []{R.drawable.wei,R.drawable.shu,R.drawable.wu};

// 設定組視圖的顯示文字

private String[]generalsTypes= new String[]{"魏","蜀","吳"};

// 子視圖顯示文字

private String[][]generals= new String[][]{

{"夏侯惇","甄姬","許褚","郭嘉","司馬懿","楊修"},

{"馬超","張飛","劉備","諸葛亮","黃月英","趙雲"},

{"呂蒙","陸遜","孫權","周瑜","孫尚香"}

};

// 子視圖圖檔

public int [][]generallogos= new int [][]{

{R.drawable.xiahoudun,R.drawable.zhenji,

R.drawable.xuchu,R.drawable.guojia,

R.drawable.simayi,R.drawable.yangxiu},

{R.drawable.machao,R.drawable.zhangfei,

R.drawable.liubei,R.drawable.zhugeliang,

R.drawable.huangyueying,R.drawable.zhaoyun},

{R.drawable.lvmeng,R.drawable.luxun,R.drawable.sunquan,

R.drawable.zhouyu,R.drawable.sunshangxiang}};

// 自己定義一個獲得文字資訊的方法

TextViewgetTextView(){

AbsListView.LayoutParamslp= new AbsListView.LayoutParams(

ViewGroup.LayoutParams.FILL_PARENT,64);

TextViewtextView= new TextView(

ExpandableList. this );

textView.setLayoutParams(lp);

textView.setGravity(Gravity.CENTER_VERTICAL);

textView.setPadding(36,0,0,0);

textView.setTextSize(20);

textView.setTextColor(Color.BLACK);

return textView;

}

// 重寫ExpandableListAdapter中的各個方法

@Override

public int getGroupCount(){

// TODOAuto-generatedmethodstub

return generalsTypes.length;

}

@Override

public ObjectgetGroup( int groupPosition){

// TODOAuto-generatedmethodstub

return generalsTypes[groupPosition];

}

@Override

public long getGroupId( int groupPosition){

// TODOAuto-generatedmethodstub

return groupPosition;

}

@Override

public int getChildrenCount( int groupPosition){

// TODOAuto-generatedmethodstub

return generals[groupPosition].length;

}

@Override

public ObjectgetChild( int groupPosition, int childPosition){

// TODOAuto-generatedmethodstub

return generals[groupPosition][childPosition];

}

@Override

public long getChildId( int groupPosition, int childPosition){

// TODOAuto-generatedmethodstub

return childPosition;

}

@Override

public boolean hasStableIds(){

// TODOAuto-generatedmethodstub

return true ;

}

@Override

public ViewgetGroupView( int groupPosition, boolean isExpanded,

ViewconvertView,ViewGroupparent){

// TODOAuto-generatedmethodstub

LinearLayoutll= new LinearLayout(

ExpandableList. this );

ll.setOrientation(0);

ImageViewlogo= new ImageView(ExpandableList. this );

logo.setImageResource(logos[groupPosition]);

logo.setPadding(50,0,0,0);

ll.addView(logo);

TextViewtextView=getTextView();

textView.setTextColor(Color.BLACK);

textView.setText(getGroup(groupPosition).toString());

ll.addView(textView);

return ll;

}

@Override

public ViewgetChildView( int groupPosition, int childPosition,

boolean isLastChild,ViewconvertView,ViewGroupparent){

// TODOAuto-generatedmethodstub

LinearLayoutll= new LinearLayout(

ExpandableList. this );

ll.setOrientation(0);

ImageViewgenerallogo= new ImageView(

ExpandableList. this );

generallogo

.setImageResource(generallogos[groupPosition][childPosition]);

ll.addView(generallogo);

TextViewtextView=getTextView();

textView.setText(getChild(groupPosition,childPosition)

.toString());

ll.addView(textView);

return ll;

}

@Override

public boolean isChildSelectable( int groupPosition,

int childPosition){

// TODOAuto-generatedmethodstub

return true ;

}

};

ExpandableListViewexpandableListView=(ExpandableListView)findViewById(R.id.list);

expandableListView.setAdapter(adapter);

// 設定item點選的監聽器

expandableListView.setOnChildClickListener( new OnChildClickListener(){

@Override

public boolean onChildClick(ExpandableListViewparent,Viewv,

int groupPosition, int childPosition, long id){

Toast.makeText(

ExpandableList. this ,

"你點選了"+adapter.getChild(groupPosition,childPosition),

Toast.LENGTH_SHORT).show();

return false ;

}

});

}

}