- 浏览: 1933787 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
龙宝宝吱吱:
我现在知道是在部署的项目里找,可是找不到啊,一般这个文件会在什 ...
webservice浏览器远程调用测试 -
龙宝宝吱吱:
这个webconfig文件在哪里啊,大神
webservice浏览器远程调用测试 -
yuer1218:
正在学习这块,能把源码发我一份吗,12045464@qq.co ...
Android时钟的widget【安卓进化三十七】 -
hongshanguo:
为嘛没有任务管理器的,求案例啊
近百android程序源码贡献 -
难得糊涂CN2010:
最近一个项目要用到widget,可以送下源码不?dz.bita ...
Android时钟的widget【安卓进化三十七】
这个星期,我考虑把添加账单的界面整下,完成该页面的功能.本来觉得很容易.可是在搞界面布局时就发现简直比写代码还难.
对于布局,基本上google不到有用的资料,而google demo 用到的最多就是listview.可我这个好像比它要复杂一点.
这周还有个问题郁闷了我很长时间就是spinner 和cursor 如何配合使用的问题,其实本来很简单的事情,可是我却被郁闷坏了.
先把我完成后的图片发出来.
界面的xml 是
- <?xml version= "1.0" encoding= "utf-8" ?>
- <ScrollView xmlns:android= "http://schemas.android.com/apk/res/android"
- android:orientation= "vertical"
- android:layout_height= "fill_parent" android:layout_width= "fill_parent" >
- <LinearLayout android:id= "@+id/LinearLayout01" android:orientation= "vertical" android:layout_height= "fill_parent" android:layout_width= "fill_parent" >
- <LinearLayout android:id= "@+id/LinearLayout02" android:layout_width= "wrap_content" android:layout_height= "wrap_content" >
- <TextView android:id= "@+id/TextView01" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "选择账目" android:minWidth= "80dip" android:textAppearance= "?android:attr/textAppearanceLarge" ></TextView>
- <EditText android:id= "@+id/edittext_acctitem" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:width= "200dip" android:maxLines= "1" android:editable= "false" android:cursorVisible= "false" ></EditText>
- </LinearLayout>
- <View android:layout_width= "fill_parent" android:layout_height= "1dip" android:background= "?android:attr/listDivider" />
- <LinearLayout android:id= "@+id/LinearLayout03" android:layout_width= "wrap_content" android:layout_height= "wrap_content" >
- <TextView android:id= "@+id/TextView03" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "填入费用" android:minWidth= "80dip" android:textAppearance= "?android:attr/textAppearanceLarge" ></TextView>
- <EditText android:id= "@+id/Fee" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:numeric= "decimal" android:width= "160dip" ></EditText>
- <TextView android:id= "@+id/TextView13" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "(元)" android:textAppearance= "?android:attr/textAppearanceLarge" ></TextView>
- </LinearLayout>
- <View android:layout_width= "fill_parent" android:layout_height= "1dip" android:background= "?android:attr/listDivider" />
- <LinearLayout android:id= "@+id/LinearLayout04" android:layout_height= "wrap_content" android:layout_width= "fill_parent" >
- <TextView android:id= "@+id/TextView02" android:layout_height= "wrap_content" android:text= "选择时间" android:layout_width= "fill_parent" android:fadingEdge= "horizontal" android:height= "24dip" android:drawablePadding= "2dip" ></TextView>
- </LinearLayout>
- <LinearLayout android:id= "@+id/LinearLayout05" android:layout_width= "wrap_content" android:layout_height= "wrap_content" >
- <TextView android:id= "@+id/vdate" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:textAppearance= "?android:attr/textAppearanceLarge" android:width= "120dip" ></TextView>
- <Button android:id= "@+id/BtnDate" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "+" android:textStyle= "bold" android:textSize= "24dip" android:height= "30dip" android:width= "30dip" ></Button>
- <TextView android:id= "@+id/vtime" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:textAppearance= "?android:attr/textAppearanceLarge" android:width= "80dip" android:gravity= "center_horizontal" ></TextView>
- <Button android:id= "@+id/BtnTime" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "+" android:textStyle= "bold" android:textSize= "24dip" ></Button>
- </LinearLayout>
- <View android:layout_width= "fill_parent" android:layout_height= "1dip" android:background= "?android:attr/listDivider" />
- <LinearLayout android:id= "@+id/LinearLayout06" android:layout_height= "wrap_content" android:layout_width= "fill_parent" >
- <TextView android:id= "@+id/TextView01" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "账目类型" android:minWidth= "80dip" android:textAppearance= "?android:attr/textAppearanceLarge" ></TextView>
- <Spinner android:id= "@+id/Spinner01" android:layout_height= "wrap_content" android:minWidth= "200dip" android:layout_width= "wrap_content" ></Spinner>
- </LinearLayout>
- <View android:layout_width= "fill_parent" android:layout_height= "1dip" android:background= "?android:attr/listDivider" />
- <TextView android:id= "@+id/TextView07" android:layout_height= "wrap_content" android:text= "填写备注" android:layout_width= "fill_parent" android:height= "24dip" ></TextView>
- <EditText android:id= "@+id/EditTextDESC" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:lines= "4" android:gravity= "top" ></EditText>
- <View android:layout_width= "fill_parent" android:layout_height= "1dip" android:background= "?android:attr/listDivider" />
- <LinearLayout android:id= "@+id/LinearLayout08" android:layout_height= "wrap_content" android:layout_width= "fill_parent" >
- <Button android:id= "@+id/BtnSave" android:width= "160dip" android:text= "保 存" android:textStyle= "bold" android:textSize= "24dip" android:layout_width= "wrap_content" android:layout_height= "wrap_content" ></Button>
- <Button android:id= "@+id/BtnCancel" android:width= "160dip" android:text= "取 消" android:textStyle= "bold" android:textSize= "24dip" android:layout_width= "wrap_content" android:layout_height= "wrap_content" ></Button>
- </LinearLayout>
- <View android:layout_width= "fill_parent" android:layout_height= "1dip" android:background= "?android:attr/listDivider" />
- </LinearLayout>
- </ScrollView>
下面我们来看下spinner和cursor的用法.
主要就是一个SimpleCursorAdapter
代码如下
- s1=(Spinner) findViewById(R.id.Spinner01);
- String[] from= new String[]{ "caption" }; //需要显示游标里面的字段
- int [] to= new int []{android.R.id.text1};
- Cursor cur=billdb.getUserid();
- SimpleCursorAdapter mAdapter= new SimpleCursorAdapter( this ,android.R.layout.simple_spinner_item, cur,from, to);
- mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- s1.setAdapter(mAdapter);
我在这儿居然搞了2天,其实写法一直没错,可是每次抱未知的行 _ID. 这个错误我也知道就是使用SimpleCursorAdapter 该方法
的游标里面必须包括一个_ID的字段. 可是我的表里面肯定有的. 在我重试了无数次后发现,区分大小写. 我倒!
而事实上我建表的语句是
db.execSQL("Create table tusers (_id integer primary key autoincrement," +
"caption text not null)");
而我在函数getUserid 里面cursor定义是
public Cursor getUserid(){
Log.v("cola","run get users cursor");
return db.query("tusers", new String[]{"_ID", "caption" }, null, null, null, null, null);
}
你单独测试这个cursor是没有问题的.
这都没用问题,也就是在这儿是不区分大小写的.但是如果你用这个cursor 绑定到SimpleCursorAdapter 这个里面去,一定要和建表语句的一致,不然就出错. 这儿把我郁闷坏了.
上面界面布局和这个spinner 搞定后,后面就是完善代码,完善界面的功能.没有新的地方了.
在用户选择完账目,填写费用,选择时间,账目类型后就保存进数据库bills表. 下周开始我计划使用一个grid把录入的数据显示出来,
还不知道grid支持横向滚动不,如果不支持估计又要自定义控件了.
附最新的代码Frm_Addbills.java
最新的billdbhelper.java
- package com.cola.ui;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.util.Log;
- /**
- * Provides access to a database of notes. Each note has a title, the note
- * itself, a creation date and a modified data.
- */
- public class BilldbHelper {
- private static final String TAG = "Cola_BilldbHelper" ;
- private static final String DATABASE_NAME = "cola.db" ;
- SQLiteDatabase db;
- Context context;
- BilldbHelper(Context _context) {
- context=_context;
- db=context.openOrCreateDatabase(DATABASE_NAME, 0, null );
- Log.v(TAG, "db path=" +db.getPath());
- }
- public void CreateTable_acctitem() {
- try {
- db.execSQL( "CREATE TABLE acctitem ("
- + "_ID INTEGER PRIMARY KEY,"
- + "PID integer,"
- + "NAME TEXT"
- + ");" );
- Log.v( "cola" , "Create Table acctitem ok" );
- } catch (Exception e){
- Log.v( "cola" , "Create Table acctitem err,table exists." );
- }
- }
- public void CreateTable_bills() {
- try {
- db.execSQL( "CREATE TABLE bills ("
- + "_ID INTEGER primary key autoincrement,"
- + " acctitemid integer,"
- + "fee integer,"
- + "userid integer,"
- + "sdate TEXT,"
- + "stime TEXT,"
- + "desc TEXT"
- + ");" );
- Log.v( "cola" , "Create Table acctitem ok" );
- } catch (Exception e){
- Log.v( "cola" , "Create Table acctitem err,table exists." );
- }
- }
- public boolean Bills_save( int acctid, int fee, int userid,String date,String time,String text){
- String sql= "" ;
- try {
- sql= "insert into bills values(null," +acctid+ "," +fee+ "," +userid+ ",'" +date+ "','" +time+ "','" +text+ "')" ;
- db.execSQL(sql);
- Log.v( "cola" , "insert Table bills ok" );
- return true ;
- } catch (Exception e){
- Log.v( "cola" , "insert Table bills err=" +sql);
- return false ;
- }
- }
- public void CreateTable_colaconfig() {
- try {
- db.execSQL( "CREATE TABLE colaconfig ("
- + "_ID INTEGER PRIMARY KEY,"
- + "NAME TEXT"
- + ");" );
- Log.v( "cola" , "Create Table colaconfig ok" );
- } catch (Exception e){
- Log.v( "cola" , "Create Table acctitem err,table exists." );
- }
- }
- public void CreateTable_users() {
- try {
- db.execSQL( "Create table tusers (_id integer primary key autoincrement," +
- "caption text not null)" );
- Log.v( "cola" , "Create Table users ok" );
- db.execSQL( "insert into tusers values (null,'个人')" );
- db.execSQL( "insert into tusers values (null,'公司')" );
- } catch (Exception e){
- Log.v( "cola" , "Create Table tusers err,table exists." );
- }
- }
- public void InitAcctitem() {
- try {
- //s.getBytes(encoding);
- db.execSQL( "insert into acctitem values (1,null,'收入')" );
- db.execSQL( "insert into acctitem values (2,1,'工资')" );
- db.execSQL( "insert into acctitem values (9998,1,'其他')" );
- db.execSQL( "insert into acctitem values (0,null,'支出')" );
- db.execSQL( "insert into acctitem values (3,0,'生活用品')" );
- db.execSQL( "insert into acctitem values (4,0,'水电煤气费')" );
- db.execSQL( "insert into acctitem values (5,0,'汽油费')" );
- db.execSQL( "insert into acctitem values (9999,0,'其他')" );
- //db.execSQL("insert into bills values(100,135,10000,'','','备注')");
- Log.v( "cola" , "insert into ok" );
- } catch (Exception e)
- {
- Log.v( "cola" , "init acctitem e=" +e.getMessage());
- }
- }
- public void Acctitem_newitem(String text, int type){
- Cursor c =db.query( "acctitem" , new String[]{ "max(_id)+1" }, "_id is not null and _id<9998" , null , null , null , null );
- c.moveToFirst();
- int maxid=c.getInt(0);
- String sql= "insert into acctitem values (" +maxid+ "," +type+ ",'" +text+ "')" ;
- db.execSQL(sql);
- Log.v( "cola" , "newitem ok text=" +text+ " id=" +type+ " sql=" +sql);
- }
- public void Acctitem_edititem(String text, int id){
- db.execSQL( "update acctitem set name='" +text+ "' where _id=" +id);
- Log.v( "cola" , "edititem ok text=" +text+ " id=" +id);
- }
- public void Acctitem_delitem( int id){
- db.execSQL( "delete from acctitem where _id=" +id);
- Log.v( "cola" , "delitem ok id=" +id);
- }
- public void QueryTable_acctitem(){
- }
-
发表评论
相关推荐
总之,实现Android个人理财工具的账单页面涉及数据库设计、界面布局和数据适配器的使用。通过精心设计和代码实现,用户可以方便地添加和管理他们的财务记录,从而提高个人财务管理的效率。在后续的部分,开发者可能...
在这个“Android应用小实例--炫酷计时器”中,我们将深入探讨如何在Android应用中创建并定制一个功能丰富的计时器。 计时器组件在Android SDK中是`android.widget.Chronometer`类,它类似于一个倒计时定时器,但...
总结,个人理财通(Android)是Android平台上的一款实用理财工具,它结合了Android系统的特性和财务管理的需求,提供了全面的个人财务解决方案。虽然缺乏官方文档,但对于用户来说,它的直观界面和实用功能足以满足...
在这个"Fragment实例-Android Studio项目"中,我们可以深入理解Fragment的使用方法以及如何在不同设备上适配。 1. **Fragment基本概念** Fragment是Activity的一部分,可以包含UI组件和业务逻辑。它们可以在一个...
Android串口开发(android-serialport-api开发)工程实例。SerialPortUtil里面有我常用的转换工具(16进制字符串转二进制字符串并补位、二进制字符串转16进制字符串并补位)
在Android开发领域,掌握实例源码是提升技能和理解系统工作原理的重要途径。"android 实例源码 集合" 提供了多种Android应用程序的源代码,这为我们提供了宝贵的参考资源,帮助开发者深入理解Android应用开发的各种...
4. 配置AVD(Android Virtual Device):通过AVD Manager创建模拟器实例,选择设备配置、系统镜像和硬件选项,以便在Windows上运行Android应用。 三、使用Android SDK进行开发 1. 创建项目:使用Android Studio,...
在Android应用开发中,创建一个个人理财工具的关键部分之一是展示用户的收支明细。在这个场景下,开发者需要从SQLite数据库中提取数据并将其呈现给用户。本文将深入探讨如何实现这一功能,特别是如何利用ListView和...
《Android-Universal-Image-Loader:高效加载与缓存图片的解决方案》 在移动开发领域,尤其是Android平台,图片加载和缓存是一个重要的课题。Android-Universal-Image-Loader(简称UIL)是一款强大的开源库,专门...
在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕适配和增强用户界面的模块化。Fragment允许开发者将应用程序的功能或UI部分分解为独立的、可重用的组件,这些组件可以在不同的...
为了使用这个库,开发者需要将其添加到项目的依赖库中,如果是使用Gradle构建系统,可以在`build.gradle`文件中添加依赖。然后,就可以在代码中创建`AsyncHttpClient`实例,配置请求参数,并注册回调来处理请求结果...
Android ADT SDK(Android Developer Tools Software Development Kit)是Android开发者用于构建、调试和发布Android应用程序的重要工具集。这个压缩包包含了版本18和19的SDK,分别对应Android 4.3 (API Level 18) ...
《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...
在Android平台上,实现简单的定位功能是一项常见的任务,它涉及到Android系统的地理位置服务,主要依赖于GPS(全球定位系统)以及网络定位技术。本实例将详细解析如何在Android应用中集成定位功能,让应用能够获取到...
《Android创意实例详解》这本书籍源码的分享,旨在为Android开发者提供丰富的实践案例和学习资源。这份源码集合涵盖了Android应用开发中的多种创新技术与设计思路,是深入理解和掌握Android开发技能的理想辅助资料。...
**Android Wi-Fi Direct 开发详解** Wi-Fi Direct,也称为Wi-Fi P2P(Peer-to-Peer),是一种无线网络连接技术,允许设备之间无需通过传统Wi-Fi接入点(如路由器)进行直接通信。这种技术在Android平台上被广泛用于...
在Android应用开发中,Fragment是实现界面动态组合和交互的重要组件。然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
Android Support Library v7 AppCompat库是Google为了兼容早期Android版本而推出的一个重要组件,它使得开发者可以将最新的Android设计元素和功能应用到Android 2.1(API级别7)及以上的设备上。此库包含了丰富的...
matlab机构运动仿真simulink实例--四连杆机构