作者:手机用户2502860901 | 来源:互联网 | 2023-09-07 11:48
前几日看到了一个简单时光轴的实现源码,学习分享一下。这个是用ExpandableListView来实现的,简单易懂。效果如图:展开后:。下面来详细说明下实现步骤:先是主布
前几日看到了一个简单时光轴的实现源码,学习分享一下。
这个是用ExpandableListView来实现的,简单易懂。
效果如图:
展开后:。
下面来详细说明下实现步骤:
先是主布局:
android:layout_
android:layout_
android:background="#f7f7f7" >
android:id="@+id/date_layout"
android:layout_
android:layout_
android:paddingBottom="10dp"
android:paddingTop="10dp" >
android:id="@+id/time_text"
android:layout_
android:layout_
android:layout_centerInParent="true"
android:text="2015年12月1日"
android:textColor="@android:color/black" />
android:id="@+id/top_line"
android:layout_
android:layout_
android:layout_below="@id/date_layout"
android:background="@color/head_line_bg" />
android:layout_
android:layout_
android:layout_below="@id/top_line" >
android:id="@+id/group_tiao"
android:layout_
android:layout_
android:layout_marginLeft="55dp"
android:background="@color/time_line_bg" />
android:id="@+id/courses_title"
android:layout_
android:layout_
android:layout_marginBottom="10dp"
android:layout_marginLeft="70dp"
android:layout_marginTop="10dp"
android:text="时光轴"
android:textColor="@android:color/black"
android:textSize="22dp" />
android:id="@+id/expandlist"
android:layout_
android:layout_
android:layout_below="@+id/courses_title"
android:cacheColorHint="#00000000"
android:divider="@null" />
其次是组和子对象的布局:
group_status_item.xml
android:layout_
android:layout_
android:gravity="center_vertical" >
android:id="@+id/imageView1"
android:layout_
android:layout_
android:layout_gravity="center_vertical"
android:layout_marginLeft="45dp"
android:layout_marginRight="5dp"
android:background="@drawable/icons_ok"
android:cOntentDescription="@string/app_name" />
android:id="@+id/linearLayout1"
android:layout_
android:layout_
android:layout_marginBottom="20dip"
android:layout_marginTop="20dp"
android:gravity="center_vertical"
android:orientation="vertical" >
android:id="@+id/one_status_name"
android:layout_
android:layout_
android:text="@string/app_name"
android:textColor="#000000"
android:textSize="18sp" />
子对象的布局只是一个TextView,略去。
先创建数据类:
GroupStatusEntity
import java.util.List;
/**
* 一级Item实体类
*
* @author zihao
*
*/
public class GroupStatusEntity {
private String groupName;
/** 二级Item数据列表 **/
private List childList;
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public List getChildList() {
return childList;
}
public void setChildList(List childList) {
this.childList = childList;
}
}
然后是二级实体类 ChildStatusEntity:
/**
* 二级Item实体类
*
* @author zihao
*
*/
public class ChildStatusEntity {
/** 发生的事件 **/
private String completeTime;
/** 是否已完成 通过这个可以修改文本颜色什么的 **/
private boolean isfinished;
public String getCompleteTime() {
return completeTime;
}
public void setCompleteTime(String completeTime) {
this.completeTime = completeTime;
}
public boolean isIsfinished() {
return isfinished;
}
public void setIsfinished(boolean isfinished) {
this.isfinished = isfinished;
}
}
ExpandableListView 继承自ListView,所以步骤一样setAdapter
创建一个StatusExpandAdapter类,继承自BaseExpandableListAdapter并实现方法。
public class StatusExpandAdapter extends BaseExpandableListAdapter {
private LayoutInflater inflater = null;
private List groupList;
/**
* 构造方法
*
* @param context
* @param oneList
*/
public StatusExpandAdapter(Context context,
List group_list) {
this.groupList = group_list;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/**
* 返回一级Item总数
*/
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return groupList.size();
}
/**
* 返回二级Item总数
*/
@Override
public int getChildrenCount(int groupPosition) {
if (groupList.get(groupPosition).getChildList() == null) {
return 0;
} else {
return groupList.get(groupPosition).getChildList().size();
}
}
/**
* 获取一级Item内容
*/
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return groupList.get(groupPosition);
}
/**
* 获取二级Item内容
*/
@Override
public Object getChild(int groupPosition, int childPosition) {
return groupList.get(groupPosition).getChildList().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
GroupViewHolder holder = new GroupViewHolder();
if (cOnvertView== null) {
cOnvertView= inflater.inflate(R.layout.group_status_item, null);
}
holder.groupName = (TextView) convertView
.findViewById(R.id.one_status_name);
holder.groupName.setText(groupList.get(groupPosition).getGroupName());
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder viewHolder = null;
ChildStatusEntity entity = (ChildStatusEntity) getChild(groupPosition,
childPosition);
if (convertView != null) {
viewHolder = (ChildViewHolder) convertView.getTag();
} else {
viewHolder = new ChildViewHolder();
cOnvertView= inflater.inflate(R.layout.child_status_item, null);
viewHolder.twoStatusTime = (TextView) convertView
.findViewById(R.id.two_complete_time);
}
viewHolder.twoStatusTime.setText(entity.getCompleteTime());
convertView.setTag(viewHolder);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return false;
}
private class GroupViewHolder {
TextView groupName;
}
private class ChildViewHolder {
public TextView twoStatusTime;
}
}
最后就是在MainActivity中添加数据了。
public class MainActivity extends Activity {
private ExpandableListView expandlistView;
private StatusExpandAdapter statusAdapter;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cOntext= this;
expandlistView = (ExpandableListView) findViewById(R.id.expandlist);
initExpandListView();
}
/**
* 初始化可拓展列表
*/
private void initExpandListView() {
statusAdapter = new StatusExpandAdapter(context, getListData());
expandlistView.setAdapter(statusAdapter);
expandlistView.setGroupIndicator(null); // 去掉默认带的箭头
expandlistView.setSelection(0);// 设置默认选中项
// 遍历所有group,将所有项设置成默认展开
int groupCount = expandlistView.getCount();
for (int i = 0; i expandlistView.expandGroup(i);
}
expandlistView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
// TODO Auto-generated method stub
expandlistView.collapseGroup(groupPosition);//关闭
return false;
}
});
}
@Override
public void onBackPressed()
{
//暂停应用,保存当前Activity的状态
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
private List getListData() {
List groupList;
String[] strArray = new String[] { "10月22日", "10月23日", "10月25日" };
String[][] childTimeArray = new String[][] {
{ "俯卧撑十次", "仰卧起坐二十次", "浏览CSDN", "刷OJ水题" },
{ "卖肉松饼","上单天使","么么哒" },
{ "睡觉~","爱生活~","仰卧起坐二十次","水电费" } };
groupList = new ArrayList();
for (int i = 0; i GroupStatusEntity groupStatusEntity = new GroupStatusEntity();
groupStatusEntity.setGroupName(strArray[i]);
List childList = new ArrayList();
for (int j = 0; j ChildStatusEntity childStatusEntity = new ChildStatusEntity();
childStatusEntity.setCompleteTime(childTimeArray[i][j]);
childStatusEntity.setIsfinished(true);
childList.add(childStatusEntity);
}
groupStatusEntity.setChildList(childList);
groupList.add(groupStatusEntity);
}
return groupList;
}
}
源码下载:源码下载