小小千想和您聊一聊

当前位置: 首页> 技术分享> ExpandableListView

ExpandableListView

  (一)、类结构:

java.lang.Object
   ↳  android.view.View
      ↳  android.view.ViewGroup
         ↳  android.widget.AdapterView<T extends android.widget.Adapter>
            ↳  android.widget.AbsListView
               ↳  android.widget.ListView
                  ↳  android.widget.ExpandableListView

  (二)、BaseExpandableListAdapter适配器的类结构:

java.lang.Object
   ↳  android.widget.BaseExpandableListAdapter

  【备注:】ExpandableListView还可以使用SimpleExpandableListAdapter适配器加载。

java.lang.Object
   ↳  android.widget.BaseExpandableListAdapter
      ↳  android.widget.SimpleExpandableListAdapter

  (三)、UI核心代码:

xml布局文件及解释: 
<ExpandableListView android:id="@+id/list_main" android:layout_width="fill_parent" android:layout_height="fill_parent" android:listSelector="#00000000" > </ExpandableListView> 
<!-- android:cacheColorHint="#00000000" 此属性用来设置:拖动列表的时候防止出现黑色背景 --> 
<!-- android:drawSelectOnTop="false" 此属性用来设置listview上的背景颜色会不会 挡住(覆盖)内容 , 如果这是为false就表示不会覆盖掉 --> 

  (四)、java核心代码:

public class MainActivity extends Activity { 
private ExpandableListView expandableListView; 
// 设置组视图的图片 
int[] groupImg = new int[] { R.drawable.wei, R.drawable.shu, R.drawable.wu }; 
// 设置组视图的显示文字 
private String[] groupData = new String[] { "魏", "蜀", "吴" }; 

  // 设置子视图图片

public int[][] childImg = new int[][] { 
{ R.drawable.qq, R.drawable.qq, R.drawable.qq, R.drawable.qq, 
R.drawable.qq, R.drawable.qq }, 
{ R.drawable.qq, R.drawable.qq, R.drawable.qq, R.drawable.qq, 
R.drawable.qq, R.drawable.qq }, 
{ R.drawable.qq, R.drawable.qq, R.drawable.qq, R.drawable.qq, 
R.drawable.qq } }; 

  // 设置子视图显示文字

private String[][] childData = new String[][] { 
{ "夏侯惇", "许褚", "郭嘉", "司马懿", "杨修" }, 
{ "马超", "张飞", "刘备", "诸葛亮", "赵云" }, 
{ "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" } };

  @Override

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
// 以下是一个取消title的样式设置 
// requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main); 

expandableListView = (ExpandableListView) findViewById(R.id.list_main); 
// 给expandableListView设置适配器 
expandableListView.setAdapter(new MyAdapter(MainActivity.this)); 

// 设置item点击的监听器 
expandableListView.setOnChildClickListener(new OnChildClickListener() { 
@Override 
public boolean onChildClick(ExpandableListView parent, View v, 
int groupPosition, int childPosition, long id) { 
// 通过groupPosition和childPosition就能获取到子列表的文字内容 
Toast.makeText(MainActivity.this, 
"你点击了:" + childData[groupPosition][childPosition], 
Toast.LENGTH_SHORT).show(); 
return false; 
} 
}); 
} 

  @Override

  // 获取组视图。就是生成组中每个item视图

// 通过这个例子希望大家学会在java中定义布局和控件。并且在java文件中去定义布局和控件的属性。 
public View getGroupView(int groupPosition, boolean isExpanded, 
View convertView, ViewGroup parent) { 
// 构造一个线性布局 
LinearLayout layout = new LinearLayout(context); 
// 让线性布局的方向为水平方向。其实默认情况下就是水平方向。这里是希望同学们学会这个设置方向的方法 
layout.setOrientation(0); 
// layout.setBackgroundResource(R.drawable.ic_launcher); 
// 构造一个ImageView控件 
ImageView logo = new ImageView(context); 
// 给这个图片控件设置内容 
logo.setImageResource(groupImg[groupPosition]); 
// 设置图片的内填充。setPadding(50, 0, 0, 0)四个参数的方向分别为左、上、右、下。 
logo.setPadding(50, 0, 0, 0); 
// 将控件加入到布局中 
layout.addView(logo); 
// 构造一个文本控件 
TextView textView = new TextView(context); 
// 设置文本的颜色 
textView.setTextColor(Color.BLUE); 
// 设置内填充边距 
textView.setPadding(36, 0, 0, 0); 
// 设置文字大小 
textView.setTextSize(20); 
// 给文本控件设置内容。就要从给定的数据源中获取数据 
textView.setText(getGroup(groupPosition).toString()); 
// 将文本控件加入到布局中 
layout.addView(textView); 
return layout; 
} 

  @Override

// 获取子视图。就是生成组中每个子item视图。该方法中的注释同上 
public View getChildView(int groupPosition, int childPosition, 
boolean isLastChild, View convertView, ViewGroup parent) { 
LinearLayout layout = new LinearLayout(context); 
layout.setOrientation(0); 
ImageView headpicView = new ImageView(context); 
headpicView 
.setImageResource(childImg[groupPosition][childPosition]); 
// 设置图片的内填充。setPadding(100, 0, 0, 0)四个参数的方向分别为左、上、右、下。 
headpicView.setPadding(100, 0, 0, 0); 
layout.addView(headpicView); 
TextView textView = new TextView(context); 
textView.setPadding(30, 0, 10, 10); 
textView.setTextSize(16); 
textView.setText(getChild(groupPosition, childPosition).toString()); 
layout.addView(textView); 
return layout; 
} 

  @Override

public boolean isChildSelectable(int groupPosition, int childPosition) { 
return true; 
} 
}; 
} 


上一篇:HTML5工具初识之网页编辑器

下一篇:让你真正了解Java(纯干货)

QQ技术交流群

千锋软件测试官方①群
858327674

加入群聊