package com.anddev.ListMore.Test; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; public class ListMoreTest extends Activity { ListView lv; Button btnLeft, btnRight; View.OnClickListener cl; MoreAdapter ma; String[] data = { "0","1","2","3","4","5","6","7","8","9","10", "11","12","13","14","15","16","17","18","19","20", "21","22","23","24","25","26","27","28","29","30", "31","32","33","34","35","36","37","38","39","40", "41","42","43","44","45","46","47","48","49","50", "51","52","53","54","55","56","57","58","59","60", "61","62","64","64","65","66","67","68","69","70", "71","72","73","74","75","76","77","78","79","80", "81","82","83","84","85","86","87","88","89","90", "91","92","93","94","95","96","97","98","99","100" }; //用于显示每列5个Item项。 int VIEW_COUNT = 5; //用于显示页号的索引 int index = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //加载Listview和2个Button initView(); //设置ListView的Adapter ma = new MoreAdapter(this); lv.setAdapter(ma); cl = new Button.OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.btnLeft: leftView(); break; case R.id.btnRight: rightView(); break; } } }; //添加2个Button的监听事件。 btnLeft.setOnClickListener(cl); btnRight.setOnClickListener(cl); //检查2个Button是否是可用的 checkButton(); } public void initView(){ lv = (ListView)findViewById(R.id.list); btnLeft = (Button)findViewById(R.id.btnLeft); btnRight = (Button)findViewById(R.id.btnRight); } //点击左边的Button,表示向前翻页,索引值要减1. public void leftView(){ index--; //刷新ListView里面的数值。 ma.notifyDataSetChanged(); //检查Button是否可用。 checkButton(); } //点击右边的Button,表示向后翻页,索引值要加1. public void rightView(){ index++; //刷新ListView里面的数值。 ma.notifyDataSetChanged(); //检查Button是否可用。 checkButton(); } public void checkButton(){ //索引值小于等于0,表示不能向前翻页了,以经到了第一页了。 //将向前翻页的按钮设为不可用。 if(index <=0){ btnLeft.setEnabled(false); } //值的长度减去前几页的长度,剩下的就是这一页的长度,如果这一页的长度比View_Count小,表示这是最后的一页了,后面在没有了。 //将向后翻页的按钮设为不可用。 else if(data.length - index*VIEW_COUNT <= VIEW_COUNT){ btnRight.setEnabled(false); } //否则将2个按钮都设为可用的。 else { btnLeft.setEnabled(true); btnRight.setEnabled(true); } } //ListView的Adapter,这个是关键的导致可以分页的根本原因。 public class MoreAdapter extends BaseAdapter { Activity activity; public MoreAdapter(Activity a){ activity = a; } //设置每一页的长度,默认的是View_Count的值。 @Override public int getCount() { // TODO Auto-generated method stub //return data.length; //ori表示到目前为止的前几页的总共的个数。 int ori = VIEW_COUNT * index; //值的总个数-前几页的个数就是这一页要显示的个数,如果比默认的值小,说明这是最后一页,只需显示这么多就可以了 if(data.length - ori < VIEW_COUNT ){ return data.length - ori; } //如果比默认的值还要大,说明一页显示不完,还要用换一页显示,这一页用默认的值显示满就可以了。 else { return VIEW_COUNT; } } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub //return addTestView(position); TextView tv = new TextView(activity); tv.setGravity(Gravity.CENTER); //TextView要显示的是当前的位置+前几页已经显示的位置个数的对应的位置上的值。 tv.setText(data[position+index*VIEW_COUNT]); return tv; } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom" > <Button android:id="@+id/btnLeft" android:layout_width="150dip" android:layout_height="wrap_content" android:text="@string/textLeft" /> <Button android:id="@+id/btnRight" android:layout_width="150dip" android:layout_height="wrap_content" android:text="@string/textRight" /> </LinearLayout> </LinearLayout>
摘自:http://www.cnblogs.com/shang53880/archive/2011/01/26/1945587.html
//在iPhone里面最讨厌的控件之一就是UINavigationBar了。这个控件样式修改不方便,连添加按钮也特别麻烦。下面的例子是如何手动添加带箭头的按钮: UINavigationItem * item = [navBar.items objectAtIndex: 0]; UINavigationItem * back = [[UINavigationItem alloc] initWithTitle: @"Back"]; NSArray * items = [[NSArray alloc] initWithObjects: back,item,nil]; [navBar setItems: items]; - (BOOL) navigationBar: (UINavigationBar * ) navigationBar shouldPopItem: (UINavigationItem * ) item { //在此处添加点击back按钮之后的操作代码 return NO; }
1,前言
相信iPhone不久就要在国内发布了,和我们在国内可以通过正规渠道买得到的iPod Touch一样,iPhone也是一个激动人心的产品。iPhone发布的同时,基于iPhone的程序也像雨后春笋一样在iTunes里面冒出来。
你将来也许会考虑买一个iPhone,体验一下苹果的富有创意的种种应用;你也许会考虑向iTunes的社区的全世界的人们展示一下你非凡的创意,当然也可以通过你的创意得到一些意想不到的收益。
OK,你也许迫不及待的准备开发了。但是先等一下,让我们回忆一下最初的电影是怎么拍摄的。这个很重要,因为和iPhone的开发比较类似。
在最初因为器材比较原始,所以拍摄电影需要很高的技术,那个时候的电影的导演基本上是可以熟练操作摄影器材的人。随着器材的完善,使用也简单起来。于是器材的使用不是决定一个电影的质量的唯一的因素,取而代之的是故事或者说电影的创意。
iPhone的开发也是这样。当然从入门到掌握的过程来说任何事情都是开始比较难,随着掌握的程度的加深,你将会觉得开发iPhone应用程序是一 件简单而且轻松的事情,到了那个时候,你的主要的制胜武器就不是开发技术,而是你的创意了。对于你来说,我在这里写的东西都是有关“摄影器材”也就是介绍 如何使用iPhone的平台来开发应用程序。
iPhone的开发语言是Objective-C。Objective-C是进行iPhone开发的主要语言,掌握了Objective-C的基本 语法以及数据结构之后,你需要熟悉一下iPhone的SDK。笔者很难做到在一篇文章里面把所有的东西都介绍清楚,所以笔者打算分成两个主题,一个是 Objective-C,一个是iPhone开发。
本系列将侧重于Objective-C。当然,任何一种开发语言都无法脱离于运行环境,Objective-C也不例外。所以在本系列当中也会穿插 的介绍一些SDK里面的一些特性,主要是数据结构方面,比如说NSString, NSArray等等。看到NSString, NSArray这些名词,你也许会感到有些茫然,不过没有关系,随着本系列的深入介绍,你会发现你非常喜欢这些东西。
1.1,谁会考虑阅读本系列
如果你对iPhone感兴趣,如果你考虑向全世界的人们展示你的创意,如果你有一颗好奇心,如果你打算通过开发iPhone程序谋生,如果你觉得苹果比Windows酷,如果你认为不懂苹果的话那么就有些不时尚的话,那么可以考虑阅读本系列。
老手也可以考虑花一点时间阅读一下,可以发帖子和笔者交流切磋。笔者发布的文章属于公益写作,旨在为大家介绍iPhone开发的一些基础知识,如果可以提供宝贵意见,笔者将不胜感激。
1.2,需要准备的东西
工欲善其事,必先利其器。 《论语·魏灵公》
第一,你需要一台苹果电脑。当然这个不是必需的条件,如果你可以在你的Intel PC上成功安装MAC OS的话,那么请忽略这一条。
第二,你需要去苹果网站上下载开发工具XCODE。注意,XCODE是完全免费的,但是需要你去注册一个账号才可以下载。由于XCODE不时的在更新,所以如果你的MAC OS不支持你下载的XCODE的话,那么你也许需要考虑买一个最新的MAC OS。
第三,你需要至少有C,C++,或者JAVA的背景知识。不过如果你没有,那么也不用担心,相信阅读了笔者的文章之后应该也可以掌握。
最后需要的东西就不是必须的了,当然有的话会更好一些。这些东西是,开发者账户(需要付费),iPhone手机(在部分国家可以免费获得,但是中国会怎么样,笔者不是很清楚) ,iPod Touch(需要购买)。
1.3 ,关于笔者的写作
笔者利用业余时间进行写作,所以无法对文章发布的时间表做出任何保证,还请各位读者谅解。但是笔者会尽最大努力在短时间之内完成写作。
由于笔者经验才识所限,在本教程当中难免会遇到遗漏,错误甚至荒谬的地方,所以还请同学们批评指正。
对于已经完成的章节,基于一些条件的改变或者勘误,或者大家提出的意见,笔者也会考虑做出适当的修改。
在每一个章节都会有代码的范例,笔者注重阐述基本概念所以代码难免会有不完整或者错误的地方,同学们可以任意的在自己的代码中使用笔者所写的代码, 但是笔者不承担由于代码错误给同学们带来的损失。同学们在阅读本教程的时候,可以直接下载范例代码运行,但是为了熟悉编码的环境以及代码的规范,笔者强烈 建议同学们按照教程自己亲自输入代码。
Objective-C的概念比较多,而且很多概念都相互交叉。比如说讲解概念A的时候,需要概念B的知识,讲解概念B的时候需要概念C的知识,讲 解概念C的时候需要概念A。这样就给本教程的写作带来了一定的麻烦,很明显笔者无法在某一个章节里面把所有的概念都讲述清楚,所以每一章都有侧重点,大家 在阅读的时候需要抓住每一章的侧重点,忽略一些和本章内容无关的新的概念和知识。
1.4,本系列的结构
第1章,也就是本章
第2章, 从Hello,World!开始
第3章, 类的声明和定义
第4章,继承
第5章,Class类型,选择器Selector以及函数指针
第6章,NSObject的奥秘
第7章,对象的初始化以及实例变量的作用域
第8章,类方法以及私有方法
第9章,内存管理
第10章,到目前为止出现的内存泄漏事件
第11章,字符串,数组以及字典
第12章,属性
第13章,类目(Categories)
第14章,协议(Protocols)
第15章,Delegate
第16章,线程
第17章,文件系统
第18章,数据系列化以及保存用户数据
第19章,网络编程
第20章,XML解析
上面带连接的章节是已经完成的章节,否则就是还没有发布的。发布过的讲座的内容可能会更新,甚至本系列讲座的结构会发生改变。
转自:http://www.cnblogs.com/yaski/archive/2009/03/27/1423083.html