自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QAQ

带着华农精神去学习!

  • 博客(15)
  • 收藏
  • 关注

原创 探索Handler机制原理

众所周知,Android是不能在主线程进行耗时操作,否则会抛出ANR(应用程序无响应)异常。于是,我们在程序开发中就会广泛地使用Handler来实现异步消息的处理,如读取网络数据并加载到程序的UI界面中。Handler的运行需要MessegeQueue和Looper的支撑,关于其三者的关系,接下来将通过源码来具体分析。 首先,我们来看一个使用Handler的情况:public class Main

2016-04-30 23:03:07 1965

原创 实现带标题的ListView

在一些项目中,往往有要求为ListView里的内容分类,比如按日期分类,就要把相同日期的项目放在一起。可以看一些示例图,会清楚一些: 以上根据标题来进行分类,实现代码如下:首先是数据项的模型:public class Data { private String text1, text2, text3; //数据1 2 3 public Data(String text1, Str

2016-04-25 21:06:05 10966 6

原创 解决ListView下拉刷新时导致图片闪烁问题

说ListView是一个难用的组件并不为过。最近在开发项目时遇到这样一个问题:当使用ImageLoader异步加载ListView的图片时,下拉刷新就会导致ListView中的图片闪烁。于是,经过几番测试,发现问题在于下拉刷新时会不断地重新计算ListView的LayoutParams导致不断执行getView()方法,最终出现了图片闪烁问题。 经过上网查找资料,最终解决了该问题,主要有两个解决方

2016-04-13 20:02:53 4919

转载 Java对象的强、软、弱和虚引用

本博客转自http://zhangjunhd.blog.51cto.com/113473/530921.对象的强、软、弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期

2016-04-07 18:30:29 733

原创 结合Tab,ViewPager,Fragment实现简单分页滑动

在APP设计当中,使用ViewPager和Fragment来实现分页滑动并不少见,该设计可以利用少量的空间来实现多内容的展示。效果图如下: 一下是实现该功能的代码:MainActivitypublic class MainActivity extends AppCompatActivity { private ViewPager viewPager; @Override

2016-04-06 11:13:41 2597

原创 二叉树递归与非递归遍历

二叉树是一种常见的数据结构。二叉树有以下特点: 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。 二叉树的第i层至多有2^{i-1}个结点; 深度为k的二叉树至多有2^k-1个结点; 对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。谈到二叉树,就不得不提到二叉树的遍历操作。其中,有三种

2016-04-03 23:58:50 758

转载 轻松理解KMP算法

字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上

2016-04-03 20:01:31 701

转载 Android任务和返回栈完全解析,细数那些你所不知道的细节

本博客转自:http://blog.csdn.net/guolin_blog/article/details/41087993任务和返回栈一个应用程序当中通常都会包含很多个Activity,每个Activity都应该设计成为一个具有特定的功能,并且可以让用户进行操作的组件。另外,Activity之间还应该是可以相互启动的。比如,一个邮件应用中可能会包含一个用于展示邮件列表的Acti

2016-04-03 17:19:38 793

翻译 LayoutInflater的正确用法

Layout inflation是在android系统中使用的术语,当XML布局资源被解析并转换成View对象时会用到。 在Android SDK中,LayoutInflater是经常使用到的,但你也许会感到惊讶当你发现了一个LayoutInflater的使用误区,而且你的APP可能正在使用这种错误方式!当你的程序在使用LayoutInflater时,如果你写过像下面的代码:inflater.in

2016-04-03 16:46:57 7484

原创 循环队列中判断队满与队空

在引用循环队列前,我们需要了解队列是如何线性实现的。 简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会发现一个问题,如上面的第四个图,0,1,2三个空间并没有使用。因此,为了占用该空间,我们使用了循环队列来实现。 循环队列原理图: 我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队满。为了

2016-04-02 11:16:38 62621 21

原创 队列的实现

队列(Queue)是一种先进先出的结构,它只允许在表的一端插入元素,而在另一端删除元素。队列在操作系统的并发中尤为重要,比如阻塞队列,优先队列等。队列也可以通过线性和链表两种方式实现。这里主要讲如何通过链表来实现队列和基本的队列操作。看看原理图吧: 需要注意的是,既然用链表实现队列,那么链表中必定有头结点,那么队头元素应是头结点指向的下一结点。以下是队列的实现方法:#include <st

2016-04-02 10:23:56 801

原创 栈的基本操作

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。栈是一种很重要的数据结构。我们可以实现栈的基本操作,比如创建栈,出栈,入栈等。先看一下原理图吧: 以下是栈的实现方式:#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0#

2016-04-01 18:11:06 721

原创 双向链表的实现

之前的博客讲到了线性表的链式存储结构,实现了链表的各种操作。但是,单链表有单向性的缺点,为了克服这一缺点,可以尝试实现双向链表。下图是双向链表的结构: 我们也可以实现双向链表的一些基本操作: 以下是实现基本操作的代码:#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0#define ElemType

2016-04-01 17:19:27 763

原创 线性表的存储结构(链式存储结构)

距上一次写线性表的顺序存储结构已经有一段时间了(详戳http://blog.csdn.net/u010429311/article/details/50933932),这次主要接着来实现线性表的链式存储结构,即我们通常所说的链表。 链表可以用一组任意的存储单元存储线性表的数据元素,而存储数据的这组存储单元可以是连续的,也可以是不连续的。具体看一下图解: 在链表中,我们也可以实现链表的创建、插

2016-04-01 16:00:44 1541

原创 简单工厂模式——加减乘除

还记得刚入门C语言的时候经常要写一些加加减减的程序来练练手。好吧,既然学了新语言,那就用新语言来写个简单的计算器吧!public class Calculator { public static void main(String[] args) { int a,b; Scanner scanner = new Scanner(System.in);

2016-04-01 00:01:52 5991

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除