demo中包含了Sqlite数据库增删改查,对存储的账号进行按照最新的时间排序,限制了最多存储5条数据。

效果图:



1.首先创建MyHelper建表:

public class MyHelper extends SQLiteOpenHelper {

    public MyHelper(Context context) {
super(context,"hayden.db",null,3);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT,phone VARCHAR(20),name VARCHAR(20),time INTEGER(100),fullName VARCHAR(20))");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }

2.接着创建存储历史的bean类,包含phone,name,time这三个字段,然后创建AccountDao对数据增删改查:

public class AccountDao {

public final static String TABLE_NAME = "account";

private MyHelper helper;

private String phone;

public AccountDao(Context context){
helper=new MyHelper(context);
} public void insert(HistoryInfo info){
SQLiteDatabase db=helper.getWritableDatabase();
//根据手机号判断去重
String[] colum = {"phone"};
String where = "phone" + "= ?";
String[] whereValue = {info.getPhone()};
Cursor cursor = db.query(TABLE_NAME, colum, where, whereValue, null, null, null);
while (cursor.moveToNext()){
phone = cursor.getString(cursor.getColumnIndex("phone"));
}
cursor.close();
ContentValues values=new ContentValues();
values.put("phone",info.getPhone());
values.put("name",info.getName());
values.put("time",info.getTime());
if(!TextUtils.isEmpty(phone)){
db.update(TABLE_NAME,values,"phone" + "=?",new String[]{phone});
}else {
db.insert(TABLE_NAME,null,values);
}
db.close();
}
public int delete(String phone){
SQLiteDatabase db=helper.getWritableDatabase();
int count=db.delete(TABLE_NAME,"phone=?",new String[]{phone +""});
db.close();
return count;
}
public List<HistoryInfo> queryAll(){
SQLiteDatabase db=helper.getWritableDatabase();
Cursor cursor=db.query(TABLE_NAME,null,null,null,null,null,null);
List<HistoryInfo> list=new ArrayList();
while (cursor.moveToNext()) {
HistoryInfo historyInfo = new HistoryInfo();
historyInfo.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
historyInfo.setName(cursor.getString(cursor.getColumnIndex("name")));
historyInfo.setTime(cursor.getLong(cursor.getColumnIndex("time")));
list.add(historyInfo);
}
db.close();
cursor.close();
return list;
}

}

3.然后监听是否点击登录历史按钮,如果上次登录成功,那么将这条数据插入到数据库中,点击历史按钮时查询列表,并且按照登录时间降序。

//是否显示历史登录列表
historyCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
initPopuWindow();//显示历史列表
if (historyList.size() == 0) {
pwdBottom.setVisibility(View.VISIBLE);
} else {
pwdBottom.setVisibility(View.GONE);
}
} else {
selectPopupWindow.dismiss(); //隐藏列表
pwdBottom.setVisibility(View.VISIBLE);
}
}
});
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.loginBtn:
if(TextUtils.isEmpty(userET.getText().toString()) || TextUtils.isEmpty(pwdET.getText().toString())){
Toast.makeText(LoginActivity.this,"账号或者密码不能为空",Toast.LENGTH_LONG).show();
return;
}else {
HistoryInfo historyInfo = new HistoryInfo(userET.getText().toString(), "Tom", new Date().getTime());
accountDao.insert(historyInfo);
startActivity(new Intent(LoginActivity.this,new SecondActivity().getClass()));
}
break;
}
}

这样仿QQ登录历史列表就完成了,希望对看到文章的同学有所帮助。下载完整demo地址:

https://download.csdn.net/download/heishuai123/10907691

原文地址:https://blog.csdn.net/lou_liang/article/details/80339313

Android仿QQ登录下拉历史列表的更多相关文章

  1. Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》

    转载此文章请注明出处:点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...

  2. 第三方开源框架的下拉刷新列表(QQ比较常用的)。

    PullToRefreshListView是第三方开源框架下拉刷新列表,比较流行的QQ 微信等上面都在用. 下载地址(此开源框架于2013年后不再更新) 点此下载 package com.lixu.k ...

  3. JS网页特效操作流程——下拉菜单列表与登录注册弹窗效果

    下拉菜单列表 <style>        *{            margin: 0px;            padding: 0px;        }        .men ...

  4. openerp模块收藏 移除下拉选择列表中的“创建并编辑”链接(转载)

    移除下拉选择列表中的“创建并编辑”链接 原文:http://shine-it.net/index.php/topic,5990.0.html 有时希望下拉列表中列出的项是与主表某个字段关联的,用户只能 ...

  5. 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)

    最近帅帅的小毛驴遇到一个很奇葩的需求: 导出Excel报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...

  6. WPF开发实例——仿QQ登录界面

    原文:WPF开发实例--仿QQ登录界面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net ...

  7. Android仿QQ ios dialog,仿QQ退出向上菜单

    Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单              github地址:https://gith ...

  8. Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)

    Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...

  9. 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面

    返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...

随机推荐

  1. PAT 1015 德才论

    https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312 宋代史学家司马光在<资治通鉴>中 ...

  2. BZOJ 1023: [SHOI2008]cactus仙人掌图 | 在仙人掌上跑DP

    题目: 求仙人掌直径 http://www.lydsy.com/JudgeOnline/problem.php?id=1023 题解: 首先给出仙人掌的定义:满足所有的边至多在一个环上的无向联通图 我 ...

  3. 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

    原文: https://blog.csdn.net/justloveyou_/article/details/57156039 使用 URLDecoder 和 URLEncoder 对中文字符进行编码 ...

  4. strings用法小记

    By francis_hao    Feb 14,2017 打印文件中可打印字符,每个序列至少四(可配置)个字符长.主要用于显示非文本文件 概述   选项解释 -a --all - 扫描整个文件,不管 ...

  5. (一)STM32固件库详解(转载)

    本篇博文是转载自emouse,因为不能直接转载,所以是复制过来再发布的. emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/   1.1 基于标准外设库的 ...

  6. Death Note

    注:本文系作者原创,但可随意转载. ********************************************************************************** ...

  7. windows远程桌面访问ubuntu12.04

    转载自 : http://blog.csdn.net/shuzui1985/article/details/7592569 1.dashboard----桌面共享 我们共享所使用的协议是rdp,所以我 ...

  8. 知问前端——日历UI(一)

    日历(datepicker)UI,可以让用户更加直观的.更加方便的输入日期,并且还考虑不同国家的语言限制,包括汉语. 调用datepicker()方法 $('#date').datepicker(); ...

  9. Gradle体验/第一篇:下装、安装、配置、体验

    http://jingyan.baidu.com/article/4d58d541167bc69dd4e9c009.html

  10. 【CF1027E】Inverse Coloring(DP)

    题意:给出一个n*n的矩阵,要求在每个位置涂上黑/白色, 要求满足:任意相邻的两行,其颜色要么完全相同,要么完全相反 任意相邻的两列,其颜色也要么相同要么完全相反 且这个矩形中,不存在任意一个大小大于 ...