博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!...
阅读量:6205 次
发布时间:2019-06-21

本文共 5779 字,大约阅读时间需要 19 分钟。

Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!


感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲的是时间轴的实现,说实话,其实就是listview的偷梁换柱,本来我会在写listview这个系列的时候写的,但是最近自己写的一个项目《Only》上用到了,很多群友说也想看看怎么实现的,独乐乐不如众乐乐,所以就提前先来分享,说说listview,这可是一个名角,在android上很受欢迎,也很实用,当然本篇不会详细讲解listview,只是说怎么用listview实现时间轴的效果,无奈listview我也正在学习当中,而且新出的RecyclerView更是如艺术般的华丽,都要去学习,只能感叹”书山有路勤为径,学海无涯苦作舟”,我们,我们就不瞎BB了,直接进入正题吧

还是老话,无图无真相

这里写图片描述

实现

1.新建项目TimeLineDemo

2.下载GSON

我们做本地存储需要,当然,你也可以从其他渠道下载

初始版本 2008年5月22日

最新版本(稳定版本) 2.2.4/2013年5月13日;2个月前
编程语言 Java
操作平台 各种平台
许可协议 Apache License 2.0
官方网站
下载地址
GSON帮助文档 :


3.Adapter

ListView需要一个adapter,我们就定义一个TimeLineAdapter
package com.lgl.timelinedemo;import java.util.List;import java.util.Map;import android.content.Context;import android.graphics.Color;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class TimelineAdapter extends BaseAdapter {
private Context context; private List
> list; private LayoutInflater inflater; public TimelineAdapter(Context context, List
> list) { super(); this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.item, null); viewHolder = new ViewHolder(); viewHolder.day = (TextView) convertView.findViewById(R.id.day); viewHolder.time = (TextView) convertView.findViewById(R.id.time); viewHolder.content = (TextView) convertView .findViewById(R.id.content); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } String day = list.get(position).get("day").toString(); String time = list.get(position).get("time").toString(); String content = list.get(position).get("content").toString(); if (day != "") { viewHolder.day.setBackgroundColor(Color.WHITE); } if (time == null) { time = "#"; } if (content == null) { content = "#"; } viewHolder.day.setText(day); viewHolder.day.setBackgroundResource(R.drawable.timeline_year); viewHolder.time.setText(time); viewHolder.day.setText(day); viewHolder.time.setText(time); viewHolder.content.setText(content); return convertView; } static class ViewHolder { public TextView day; public TextView time; public TextView content; }}

4.item.xml

adapter需要一个item,也就是时间轴偷梁换柱的根本

这里写图片描述

5.activity_main.xml

然后我们就可以来写主布局,为了方便,我就直接添加一个EditText和一个Button做添加处理了

6.MainActivity

好了,最后一步,我们就来编写这个ListView了
package com.lgl.timelinedemo;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Collections;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;public class MainActivity extends Activity {
// 声明一个listview private ListView listView; // listview的adapter private TimelineAdapter timelineAdapter; // 数据集 private List
> list; private EditText et; private Button add; // 键值对 private Map
map; private String cacheName = "cache"; private Gson gson = new Gson(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取SharedPreferences SharedPreferences sp = getSharedPreferences("config", Context.MODE_PRIVATE); final SharedPreferences.Editor edit = sp.edit(); // 标记 String cache = sp.getString(cacheName, ""); list = gson.fromJson(cache, new TypeToken
>>() { }.getType()); if (list == null) { list = new ArrayList
>(); } et = (EditText) findViewById(R.id.et); listView = (ListView) this.findViewById(R.id.listview); listView.setDividerHeight(0); timelineAdapter = new TimelineAdapter(this, list); listView.setAdapter(timelineAdapter); add = (Button) findViewById(R.id.add); add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { map = new HashMap
(); // 月-日 SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日"); // 时-分 SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss"); map.put("day", sdf.format(new Date())); map.put("time", sdf1.format(new Date())); map.put("content", et.getText().toString()); list.add(map); // 倒序 Collections.reverse(list); // 通知刷新 timelineAdapter.notifyDataSetChanged(); // 提交 edit.putString(cacheName, gson.toJson(list)); edit.commit(); } }); }}

这里写图片描述

因为用了GSON,所以我们做了本地存储,软件关闭后并不会清除数据,本地化保存,当然,如果有朋友想说怎么删除,只要removeitem就可以了,不过,这属于listview的操作,都是后话了,如果发现有错误,请指点,万分感谢,如果觉得好,来个关注点个赞,嘻嘻!

Demo下载地址:

你可能感兴趣的文章
会计的思考(37):“弱水三千,只取一瓢饮”--业务人员的财务意识
查看>>
随机存取存储器(RAM)
查看>>
activiti 5.22的demo运行
查看>>
构建微服务:Spring boot 入门篇
查看>>
转:PHP应用性能优化指南
查看>>
Codeforces 835 F Roads in the Kingdom(树形dp)
查看>>
作业1---四则运算
查看>>
MVC3.0+DWZ探索
查看>>
小程序入口传参:关于带参数的小程序扫码进入的方法
查看>>
转载:ASP.NET在后台代码实现个功能,根据选择提示用户是否继续执行操作
查看>>
[Angularjs]锚点操作服务$anchorScroll
查看>>
静态代理设计与动态代理设计
查看>>
uva-10152-乌龟排序
查看>>
sqlmap手册
查看>>
将链表中m-n范围内的数进行倒序
查看>>
怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机!
查看>>
【翻译】Ext JS 4——Ajax和Rest代理处理服务器端一场和消息的方法
查看>>
OI基础系列之最大子数组问题
查看>>
Zookeeper概述、特点、数据模型
查看>>
Nginx_lua
查看>>