效果图:
实现这一效果我们需要用到的类是ExpandableListView
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/elv_score_view"
></ExpandableListView>
</LinearLayout>
</LinearLayout>
Activity文件:
package com.example.a;
import android.app.ExpandableListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Administrator on 2017/6/18 0018.
*/
public class ScoreFragment extends Fragment {
private ExpandableListView elv_score_view;
private SQLiteDatabase sqLiteDatabase;
private List<String> Group;
private List<List<String>> Child;
private List<String> ChildFirst;
private List<String> ChildSecond;
private List<String> ChildThird;
private List<String> ChildFour;
private List<String> ChildFive;
private List<String> ChildSix;
private List<List<Integer>> ChildPicture;
private Cursor cursor_sztl,cursor_sztl_true,cursor_sztl_false,cursor_njjzw,cursor_njjzw_true,cursor_njjzw_false,
cursor_wxcs,cursor_wxcs_true,cursor_wxcs_false,cursor_dlzjwd,cursor_dlzjwd_true,
cursor_dlzjwd_false,cursor_bkzs,cursor_bkzs_true,cursor_bkzs_false,cursor_shcs,
cursor_shcs_true,cursor_shcs_false;
public ScoreFragment(SQLiteDatabase sqLiteDatabase){
this.sqLiteDatabase=sqLiteDatabase;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_score,null);
cursor_wxcs = sqLiteDatabase.rawQuery("select * from topic where classify=?",new String[]{"文学常识"});
cursor_wxcs_true=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"文学常识",1+""});
cursor_wxcs_false=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"文学常识",2+""});
cursor_sztl = sqLiteDatabase.rawQuery("select * from topic where classify=?",new String[]{"数字推理"});
cursor_sztl_true=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"数字推理",1+""});
cursor_sztl_false=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"数字推理",2+""});
cursor_njjzw = sqLiteDatabase.rawQuery("select * from topic where classify=?",new String[]{"脑经急转弯"});
cursor_njjzw_true=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"脑经急转弯",1+""});
cursor_njjzw_false=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"脑经急转弯",2+""});
cursor_dlzjwd = sqLiteDatabase.rawQuery("select * from topic where classify=?",new String[]{"地理知识问答"});
cursor_dlzjwd_true=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"地理知识问答",1+""});
cursor_dlzjwd_false=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"地理知识问答",2+""});
cursor_bkzs = sqLiteDatabase.rawQuery("select * from topic where classify=?",new String[]{"百科知识"});
cursor_bkzs_true=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"百科知识",1+""});
cursor_bkzs_false=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"百科知识",2+""});
cursor_shcs = sqLiteDatabase.rawQuery("select * from topic where classify=?",new String[]{"生活常识"});
cursor_shcs_true=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"生活常识",1+""});
cursor_shcs_false=sqLiteDatabase.rawQuery("select * from topic where classify=? and tisboolean=?",new String[]{"生活常识",2+""});
Group = new ArrayList<String>();
Group.add("文学常识");
Group.add("数字推理");
Group.add("脑经急转弯");
Group.add("地理知识问答");
Group.add("百科知识");
Group.add("生活常识");
ChildThird= new ArrayList<String>();
ChildThird.add("正确题数:"+cursor_wxcs_true.getCount());
ChildThird.add("错误题数:"+cursor_wxcs_false.getCount());
ChildThird.add("未完成题数:"+(cursor_wxcs.getCount()-cursor_wxcs_false.getCount()-cursor_wxcs_true.getCount()));
ChildFirst = new ArrayList<String>();
ChildFirst.add("正确题数:"+cursor_sztl_true.getCount());
ChildFirst.add("错误题数:"+cursor_sztl_false.getCount());
ChildFirst.add("未完成题数:"+(cursor_sztl.getCount()-cursor_sztl_false.getCount()-cursor_sztl_true.getCount()));
ChildSecond= new ArrayList<String>();
ChildSecond.add("正确题数:"+cursor_njjzw_true.getCount());
ChildSecond.add("错误题数:"+cursor_njjzw_false.getCount());
ChildSecond.add("未完成题数:"+(cursor_njjzw.getCount()-cursor_njjzw_false.getCount()-cursor_njjzw_true.getCount()));
ChildFour= new ArrayList<String>();
ChildFour.add("正确题数:"+cursor_dlzjwd_true.getCount());
ChildFour.add("错误题数:"+cursor_dlzjwd_false.getCount());
ChildFour.add("未完成题数:"+(cursor_dlzjwd.getCount()-cursor_dlzjwd_false.getCount()-cursor_dlzjwd_true.getCount()));
ChildFive= new ArrayList<String>();
ChildFive.add("正确题数:"+cursor_bkzs_true.getCount());
ChildFive.add("错误题数:"+cursor_bkzs_false.getCount());
ChildFive.add("未完成题数:"+(cursor_bkzs.getCount()-cursor_bkzs_false.getCount()-cursor_bkzs_true.getCount()));
ChildSix= new ArrayList<String>();
ChildSix.add("正确题数:"+cursor_shcs_true.getCount());
ChildSix.add("错误题数:"+cursor_shcs_false.getCount());
ChildSix.add("未完成题数:"+(cursor_shcs.getCount()-cursor_shcs_false.getCount()-cursor_shcs_true.getCount()));
Child = new ArrayList<List<String>>();
Child.add(ChildThird);
Child.add(ChildFirst);
Child.add(ChildSecond);
Child.add(ChildFour);
Child.add(ChildFive);
Child.add(ChildSix);
List<Integer> tmp_list = new ArrayList<Integer>();
tmp_list.add(R.drawable.p_true);
tmp_list.add(R.drawable.p_false);
tmp_list.add(R.drawable.bz);
ChildPicture = new ArrayList<List<Integer>>();
ChildPicture.add(tmp_list);
ChildPicture.add(tmp_list);
ChildPicture.add(tmp_list);
ChildPicture.add(tmp_list);
ChildPicture.add(tmp_list);
ChildPicture.add(tmp_list);
elv_score_view = (ExpandableListView) view.findViewById(R.id.elv_score_view);
elv_score_view.setAdapter(new MyExpandableListViewAdapter(getActivity()));
elv_score_view.setGroupIndicator(null);
return view;
}
class MyExpandableListViewAdapter extends BaseExpandableListAdapter{
private Context context;
public MyExpandableListViewAdapter(Context context) {
this.context = context;
}
@Override
public int getGroupCount() {
return Group.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return Child.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return Group.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return Child.get(groupPosition).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupHolder groupHolder=null;
if (convertView==null){
convertView=getActivity().getLayoutInflater().from(context).inflate(R.layout.group,null);
groupHolder = new GroupHolder();
groupHolder.txt= (TextView) convertView.findViewById(R.id.notice_item_date);
convertView.setTag(groupHolder);
}else{
groupHolder= (GroupHolder) convertView.getTag();
}
groupHolder.txt.setText(Group.get(groupPosition));
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ItemHolder itemHolder = null;
if (convertView == null) {
convertView = (View) getActivity().getLayoutInflater().from(context).inflate(
R.layout.child, null);
itemHolder = new ItemHolder();
itemHolder.txt = (TextView) convertView.findViewById(R.id.group);
itemHolder.img = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(itemHolder);
} else {
itemHolder = (ItemHolder) convertView.getTag();
}
itemHolder.txt.setText(Child.get(groupPosition).get(
childPosition));
itemHolder.img.setBackgroundResource(ChildPicture.get(groupPosition).get(
childPosition));
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
class GroupHolder {
public TextView txt;
public ImageView img;
}
class ItemHolder {
public ImageView img;
public TextView txt;
}
}
只需要写好上述代码就可以实现图中的效果了。