当前位置: 代码迷 >> Android >> android学习笔记(2、便签demo)
  详细解决方案

android学习笔记(2、便签demo)

热度:13   发布时间:2016-04-28 06:56:28.0
android学习笔记(二、便签demo)

?android的开发环境搭建完毕后,想看看代码,无奈博主懒啊!没有耐心看书啊!只好想先做个小例子,然后不会的知识点在去查,这样比较有动力 吐舌头。话不多说了,进入正题。

需求是这样的,做一个便签功能,默认给用户两个便签,第一个有默认欢迎文字。用户修改完便签内容后,自动保存。

这次涉及到两个知识点,一是对数据库的操作,要查询、添加、修改;二是动态生成控件,用户可以添加新便签(后续实现)。

既然是动态添加,activity_main.xml(我的主页面)里就是空白的内容了,没有任何控件。

先看下代码结构

MainActivity是程序主入口,Dao是操作数据库的类,EditTextFacory是用来创建文本框EditText的。

具体代码见附件,我这里主要说下我遇到的问题和一些关键代码。

1、操作数据库要继承SQLiteOpenHelper类,它是一个抽象类,需要重写onCreate 方法和构造方法,主要用来创建数据库的。

private SQLiteDatabase db = null;		public Dao(Context context, int version) {		super(context, DBConstant.DB_NAME, null, version);		if(db==null)			db = this.getWritableDatabase();			}

?

?

@Override	public void onCreate(SQLiteDatabase db) {		String sql = "create table " + DBConstant.TABLE_NAME + "(" +				"id integer," +				"content text"+ 				")";		db.execSQL(sql);	}

?

?

后面的关于增删改查的方法就可以自己编写了,可jdbc里的差不多,这里只看一个插入的例子吧!

public void insert(int id,String txt){		db.execSQL("insert into "+DBConstant.TABLE_NAME+" values(?,?)", new Object[]{id,txt});	}

?(android的各个类名、方法名都比较通俗易懂,不知道的方法可以大胆尝试,也许就是你猜测的功能哦)

?

补充:在写查询的时候,先看下 它的查询方法

Cursor cursor = this.getReadableDatabase().rawQuery(sql, null);

它返回的是一个?Cursor!对,就像数据库里的游标,循环它的时候可以这样

while(cursor.moveToNext())

?

?

2、动态生成控件

这个地方纠结了我挺长时间。现在说说我遇到的问题。

首先我是从数据库里查出用户的便签数据,然后创建EditText,问题出现在布局上。我创建的两个EditText,第一个是有默认文字的,第二个是空白的,运行起来后只能看到第二个空白的便签,第一个被盖住了!无论我怎么设置margin(是不是和html里很像)都不好使,最后参考了http://bbs.9ria.com/thread-246707-1-1.html里的写法,在原来已有页面的基础上,新建了一个Layout,然后对这个layout进行设置

RelativeLayout view = new RelativeLayout(this);RelativeLayout.LayoutParams params =				new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,60);Log.i("info", txt.getId()+"的margin:"+(20+(txt.getId()-1)*(60+20)));		params.setMargins(0, 20, 0, 0);//距离上一控件距离view.addView(txt, params);

?总结:在对控件进行布局设置的时候,最好是新创建一个layout,不要在最基础的上面进行设置。

?

?3、EditText的样式设置:

EditText创建出来后,可以设置一些基本样式,比如背景颜色等。

这些方法都比较简单,从字面上就能理解意思。这里要说的有一点,setBackgroundColor的时候,里面的参数是int类型的,这就让人很矛盾了,int类型是什么颜色呢?第一次接触的时候应该怎么知道有哪些值呢?这里说下,setBackgroundColor,设置颜色,那我就看看有没有跟颜色相关的类,Color+Alt+/一下,发现果然有这个类,嘿嘿。发现里面有一些定义好的静态变量,如果你想设置类似#FFF这样的颜色也可以,Color里有个parseColor方法可以帮你。同样的,我在设置setInputType的时候,发现里面的参数也是int,就试下InputType,还真有这个类。。。

4、给EditText设置失去焦点事件(即html里的onblur),使之在失去焦点的时候保存数据

editText.setOnFocusChangeListener(new OnFocusChangeListener() {						@Override			public void onFocusChange(View v, boolean hasFocus) {				if(!hasFocus){					Dao dao = new Dao(context, 1);					dao.update(v.getId(), ((EditText)v).getText().toString());				}			}		});

?

?

  相关解决方案