热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Android开发学习】简单时光轴详解

前几日看到了一个简单时光轴的实现源码,学习分享一下。这个是用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;
}
}


源码下载:源码下载


推荐阅读
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 这两天用到了ListView,写下遇到的一些问题。首先是ListView本身与子控件的焦点问题,比如我这里子控件用到了Button,在需要ListView中的根布局属性上加上下面的这一个属性:and ... [详细]
  • 在最近的一系列文章,对midipadAPP,有一个关于一个radialgradiant渲染每个padview利用的探讨,对审美的原因&#x ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 2021年最详细的Android屏幕适配方案汇总
    1Android屏幕适配的度量单位和相关概念建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
author-avatar
手机用户2502860901
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有