Android快速入门的第二个App(讲解版)
总结一下todolist这个app制作的大致步骤。
- 先用eclipse生成相关的模板。
- 编辑layout——界面搭好,对每一个View属性写好。
- 然后在activity的java文件中写逻辑
- 最后增加存储功能。
1. 先用eclipse生成相关的模板。
这个就不用讲了。
2. 编辑layout——界面搭好,对每一个View属性写好。
在生成这个界面的时候,我们最好先使用拖拽功能,每一个XML文件均可以有Graphic界面,在这个界面下,我们可以what you see is what you get。在图形界面下,你可以看用每一个控件的属性,研究每一个属性。这样来说上手速度会比较快一些。当然,这是前期你需要打基础的时候使用的,后期我感觉直接用代码编辑会比较好一些(图形界面太卡)。
如果你有相关拖拽控件编程的经历的话(delphi),应该会非常容易上手,很多属性都是一样的。
回到本文,提一下需要关注的点:
- 关于@+id/balabala,这个需要注意他们是怎么命名的,btnAddItem edNewItem lvItems,这些是小驼峰命名法,这种命名方法主要应用于JAVA代码中的变量名和函数名。当我们在java文件中写逻辑的时候,我们尽量使用这种方法xml里面名字与java变量名或者函数名称相同的方法来命名。(eg:xml文件中 id 为 “lvItems”的,java文件中是这么定义并,引用的,首先定义Listview lvItems;然后 lvItems = (ListView) findViewById(R.id.lvItems); )
- 我觉得如果控件比较多的话,先拿纸笔画个草图并为之命名好各个部件这样的话不会混乱。
3. 然后在activity的java文件中写逻辑
这个就是本文的重点部分罗,
你在前面已经完成了相关的图形操作,android工具在R.java部分已经为之处理好了java与Res/文件夹之间联系。
现在进行的操作如下
- 在listView上面显示出来
- ADD按钮可以添加任务
按照先难后易的道理,
1. 第一个listview的处理。
- Arraylist 等等集合类需要有一定了解,不懂的话看这里随便百度看一下。
- 关于listview 和 Adapter也需要有一定的了解(非要简单概括一下的话Adapter就是翻译官,负责沟通数据和界面呈现的翻译官。)http://www.cnblogs.com/noTice520/archive/2011/12/05/2276379.html
- 增加任务,不增加任务怎么叫做todolist?这个比较简单。
- 如果需要代码的话到这里下载 http://blog.csdn.net/ctt594088/article/details/38174067
public class TodoActivity extends Activity { ArrayList<String> items; ArrayAdapter<String> itemsAdapter; ListView lvItems; //在这里创建方便下面的数据引用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_todo); //引用界面上的listview lvItems = (ListView) findViewById(R.id.lvItems); items = new ArrayList<String>(); itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); //第一个array适配器 lvItems.setAdapter(itemsAdapter); //对图形界面上面的listview(lvItems)搭载适配器(itemsAdapter); items.add("1st") //添加第一组数据,仅仅用于测试,过会就会删除。 }
注意:第一个表示实例化的actvity(java基本知识),第二个表示 系统资源ID(是android.R.balabala),第三个表示传入的数据(其实是数据的引用)。
根据引用ArrayAdapter会调用toString(),将items包装,并以simple_list_item_1样子显示出来。
Next,我们添加一个Button的事件,xml文件中,为button添加onClick属性,命名属性值为 android:onClick=”addTodoItem”
然后在todoactivity.java中添加函数。如下:
图片2(注意画箭头部分)
public void addTodoItem(View v) { EditText etNewItem = (EditText) findViewById(R.id.edNewItem); //找到界面控件 itemsAdapter.add(etNewItem.getText().toString()); //也可以写成 items.add(etNewItem.getText().toString()); etNewItem.setText(""); //清空edittext }
可以添加,但是任务做完了总要删除吧?
好,我们现在实现删除功能——listview中长按删除功能。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_todo); lvItems = (ListView) findViewById(R.id.lvItems); items = new ArrayList<String>(); readItem(); itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); lvItems.setAdapter(itemsAdapter); setupListviewListener(); //添加函数 } private void setupListviewListener() { lvItems.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub items.remove(arg2); //移除 itemsAdapter.notifyDataSetChanged(); //这一句不能不写 return true; } }); }
注意,我刚刚说,itemsAdapter.notifyDataSetChanged();不能不写,为什么呢?这可能涉及到异步处理(涉及到数组的处理,我也暂时不太了解,不写报错),先记住。等我查完资料以后再补充。
4. 最后增加存储功能。
http://download.csdn.net/detail/ctt594088/7683963,存储功能需要用到apache的一个第三方包。
直接把相关包拖入一个lib中,
接着编写下面代码。
private void readItem() { // TODO Auto-generated method stub File filesDir = getFilesDir(); File todoFile = new File(filesDir, "todo.txt"); try { items = new ArrayList<String>(FileUtils.readLines(todoFile)); } catch (IOException e) { // TODO: handle exception items = new ArrayList<String>(); e.printStackTrace(); } } private void saveitems() { File filesDir = getFilesDir(); File todoFile = new File(filesDir, "todo.txt"); try { FileUtils.writeLines(todoFile, items); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); }
因为使用了第三方包,所以写起来非常顺畅。
使用了trycatch异常机制。
分别在onCreate()开始初始化界面时候调用readItem,然后在Add数据和消除数据的时候调用saveitems。
总结
好了,第一个程序就完成了。发现,写一步一步的教程还是太费时间了。
源码下载地址: