深圳软件测试培训:移动测试ExpandableListView

深圳软件测试培训:移动测试ExpandableListView
一、ExpandableListView:
(一)、类结构:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView

【备注:】ExpandableListView还可以使用SimpleExpandableListAdapter适配器加载。
java.lang.Object
↳ android.widget.BaseExpandableListAdapter
↳ android.widget.SimpleExpandableListAdapter

(三)、UI核心代码:
1、xml布局文件及解释:

(四)、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;
}
});
}

// 以下是自定义了一个可扩展ListView的适配器。BaseExpandableListAdapter是一个直接继承于object的对象。
class MyAdapter extends BaseExpandableListAdapter {
private Context context;

// 构造方法,目的是让context对象传进类中,方便调用
public MyAdapter(Context context) {
this.context = context;
}

@Override
// 获取组的个数
public int getGroupCount() {
return groupData.length;
}

@Override
// 获取组中每个item的内容
public Object getGroup(int groupPosition) {
return groupData[groupPosition];
}

@Override
// 获取组中每个item的id
public long getGroupId(int groupPosition) {
return groupPosition;
}

@Override
// 获取每组中每个子item的个数
public int getChildrenCount(int groupPosition) {
return childData[groupPosition].length;
}

@Override
// 获取子item的内容
public Object getChild(int groupPosition, int childPosition) {
return childData[groupPosition][childPosition];
}

@Override
// 获取子item的id
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}

@Override
public boolean hasStableIds() {
return true;
}

@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;
}
};
}

猜你喜欢

转载自blog.csdn.net/qq_37124438/article/details/89553379