layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
text="@string/str1"/>
布局
线性布局:
LinearLayout
给按钮添加事件
1.在布局文件中添加一个button标签,并声明id
2.在activity.java中声明一个Button变量
3.根据ID获得对应的布局中的按钮并赋给button变量
abc=(Button)this.findViewById(R.id.registBtn);
//先设置要显示的布局文件
//然后获得布局文件中的按钮并与上面的button变量进行绑定
4.添加事件功能:
监听器,让当前类实现OnClickListener,并实现它的方法onClick
5.在onClick方法中执行操作,如
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.registBtn:
System.out.println("点击了按钮一");
break;
caseR.id.loginBtn:
System.out.println("点击了按钮二");
break;
}
}
界面Activity
自己创建程序界面:
1.创建一个类,extendsActivity,并重写父类中的onCreate方法
2.创建一个layout布局文件,并在类中使用this.setContentView(R.layout.linearlayout);设置使用哪一个布局文件
3.在menifest.xml文件中设置这个activity的配置信息
Activity之间跳转
Intentintent=newIntent(MainActivity.this,SecondActivity.class);//意图
this.startActivity(intent);
MainActivity.this是表示当前界面类
SecondActivity.class表示要跳转到的目标activity类
Activity之间的数据传递
1.A跳转到B界面,同时将参数传给B界面
在A中声明意图后,将参数绑定到意图变量中,如下
Intentintent=newIntent(MainActivity.this,SecondActivity.class);//意图
//将参数绑定到意图中
intent.putExtra("username",usernameET.getText().toString());
intent.putExtra("age",23);
this.startActivity(intent);
在B的oncreate方法中获得意图
Intentintent=this.getIntent();
获得该意图中传过来的参数值
username=intent.getStringExtra("username");
intage=intent.getIntExtra("age",0);
1.A启动B,B给A传值
在A中启动B界面,但不是使用startactivity,而是this.startActivityForResult(intent,1001);
在B界面中结束当前界面的代码不使用this.finish(),而使用:
Intentintent=newIntent();
this.setResult(1002,intent);
this.finish();
回到A界面,重写父类的一个方法onActivityResult(intrequestCode,intresultCode,Intentdata),在该方法中通过resultcode为区分是哪个界面返回的值
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//TODOAuto-generatedmethodstub
super.onActivityResult(requestCode,resultCode,data);
System.out.println("requestcode="+requestCode+"resultCode="+resultCode);
switch(resultCode){
case1002:
Stringname=data.getStringExtra("name2");
System.out.println("第二个界面返回的值name2="+name);
break;
case33:
Stringname3=data.getStringExtra("name3");
System.out.println("第三个界面返回的值name3="+name3);
break;
}
}
Activity的生命周期
onCreate():
是在程序打开时执行,且在整个生命周期中只执行一次,所以一般用来进行初始化
onStart():
是在程序打开时或程序返回时执行,且执行多次,
onStop():
是在程序退出或程序被推到后台执行时执行,且执行多次
onDestroy();是在程序退出时执行,只执行一次,一般用来释放资源,即将在oncreate方法中获得的一些资源进行释放。
onResume();是在onstart方法之后执行,可以执行多次
onReStart();当使程序大后台推到前台执行时会先执行此方法,然后执行onstart方法,可以在onrestart方法中进行一些恢复性的操作。
onPause();即暂停方法,是在退出或将程序推到后台执行时执行的第一个方法,可以执行多次。
可以在这里对一些正在执行的操作进行停止。
程序启动时执行(真正启动程序,而不是返回原来的程序)onCreate---onStart—onResume
点击主界面按钮时执行:
onPause---onStop
再重新进入该程序时执行:
onRestart---onStart---onResume
点击返回按钮时,其实就是退出程序时执行:
onPause—onStop—onDestroy
ListView信息列表
1.在布局文件中添加一个ListView组件
2.在layout文件夹中创建一个新的布局文件,用来设计列表中每一项的布局内容
3.在activity中listview组件与ListView变量绑定
4.创建数据内容,使用Listlist=newArrayList();向list中添加Map对象
//创建数据内容
ListuserList=newArrayList();
Mapmap=newHashMap();
map.put("username","bushi1");
map.put("age",23);
userList.add(map);
map=newHashMap();
map.put("username","bushi2");
map.put("age",24);
userList.add(map);
map=newHashMap();
map.put("username","bushi3");
map.put("age",25);
userList.add(map);
map=newHashMap();
map.put("username","bushi4");
map.put("age",26);
userList.add(map);
map=newHashMap();
map.put("username","bushi5");
map.put("age",27);
userList.add(map);
map=newHashMap();
map.put("username","bushi6");
map.put("age",23);
userList.add(map);
5.创建适配器
//创建适配器
SimpleAdaptersimpleAdapter=newSimpleAdapter(this,userList,R.layout.userlist_item,newString[]{"username","age"},newint[]{R.id.usernameTV,R.id.userageTV});
上面的userList是存放了数据的集合
R.layout.userlist_item是listview中每一项的布局文件
newString[]{"username","age"}是userlist中map中的每项数据的键
int[]{R.id.usernameTV,R.id.userageTV}是item.xml布局文件中组件的ID
即将map中的某个键值赋给某个组件
6.设置适配器给listview
//将适配器赋给listview
userLV.setAdapter(simpleAdapter);
Activity界面
手动创建界面并跳转
1.创建一个类,继承Activity,重写父类的onCreate方法
2.创建一个布局文件
3.在onCreate方法中,设置布局文件this.setContentView(R.layout.second);
4.在androidmenifest.xml中声明新的activity
name=".SecondActivity"android:
label="thisissecondactivity">
5.在第一个界面的按钮事件中添加跳转的代码
//开始跳转
Intentintent=newIntent(FirstActivity.this,SecondActivity.class);//意图
//跳转
FirstActivity.this.startActivity(intent);
A界面跳转到B界面进行传值
1.在第一个界面的跳转代码之前进行参数绑定
//开始跳转
Intentintent=newIntent(FirstActivity.this,SecondActivity.class);//意图
//设置参数
intent.putExtra("username","bushi");
intent.putExtra("age",12);
//跳转
FirstActivity.this.startActivity(intent);
1.在B界面中的onCreate方法中获得参数
Intentintent=this.getIntent();
Stringun=intent.getStringExtra("username");
intage=intent.getIntExtra("age",0);
System.out.println("userame="+un+"age="+age);
A界面跳转到B界面,然后B将值返回给A界面
1.在A界面跳转时使用this.startActivityForResult(intent,101);跳转到B界面
2.在B界面中通过意图设置参数
//结束当前面,返回上一界面
Intentintent=newIntent();
intent.putExtra("addr","shandong");
this.setResult(1020,intent);
SecondActivity.this.finish();
3.在A界面中重写Activity的一个方法:
onActivityResult()
通过该方法的resultcode来区别是由哪一个界面返回的,然后就可以通过参数intent来获得返回的值
结束当前界面
this.finish();
Activity的生命周期
程序启动时:
oncrate—onstart—onresume
程序退出时:
onpause()—onstop—ondestroy
程序推到后台:
onpuase—onstop
程序从后台恢复:
onrestart—onstart—onresume
Oncreate()只执行一次,是在程序启动时执行。
一般用来做初始化用
Ondestroy() 只执行一次,是在程序退出时执行.一般用来释放资源
ListView组件
1.在布局文件中添加一个ListView组件
2.重新创建一个布局文件,用来设计每一项的布局内容
3.在activity中绑定该组件
4.定义一个List集合,并向其添加一些Map对象,map中包含了一些键值对
Listlist=newArrayList();
Mapmap=newHashMap();
map.put("username","bushi1");
list.add(map);
map=newHashMap();
map.put("username","bushi2");
list.add(map);
map=newHashMap();
map.put("username","bushi3");
list.add(map);
map=newHashMap();
map.put("username","bushi4");
list.add(map);
map=newHashMap();
map.put("username","bushi5");
list.add(map);
map=newHashMap();
map.put("username","bushi6");
list.add(map);
5.定义一个适配器
SimpleAdaptersimpleAdaptor=newSimpleAdapter(this,list,R.layout.userlist_item,newString[]{"username"},newint[]{R.id.usernameTV});
6.为listview设置适配器
userLV.setAdapter(simpleAdaptor);
通过命令框查看数据库和查询sqlite中的数据
1.打开运行,输入cmd,打开命令输入框,输入adbshell命令
2.如果不能识别adb命令,则需要将sdk目录下的tools目录放到环境变量path中
3.命令执行成功后,会出现一个#号,然后输入cddata回车,再cddata回车
4.继续cd你的项目的包名回车
5.进去以后使用ls没有列出database目录,说明这个数据库还没有创建
6.当执行了创建数据库的代码后如果还没有database目录,则需要读或写一次数据库
7.Cddatabases回车,就可以 ls出数据库的名称
8.看到数据库名称后,执行sqlite3数据库名回车即可执行sql命令
数据库操作SQLite
1.创建DataBaseHelper,继承SQLiteOpenHelper
2.在onCreate方法添加创建表的语句
db.execSQL("createtablestudent(snumvarchar(20),snamevarchar(20),ageint,heightfloat)");
1.在你的按钮事件中添加如下代码,实现创建数据库
dbh=newDataBaseHelper(MainActivity.this,"studentsys",null,1);
SQLiteDatabasesqldb=db.getReadableDatabase();
2.在添加记录的按钮事件中添加如下代码
SQLiteDatabasedb=dbh.getWritableDatabase();
ContenValuescv=newContentValues();
cv.put(“name”,”bushi”);
cv.put(“age”,24);
db.insert(“student“,null,cv);
db.close();
6.删除记录
SQLiteDatabasedb=dbh.getWritableDatabase();
db.delete("student","snum=?
",newString[]{"ht001"});
db.close();
7.修改记录
SQLiteDatabasedb=dbh.getWritableDatabase();
ContentValuescv=newContentValues();
cv.put("sname","aobama");
cv.put("age",52);
db.update("student",cv,"snum=?
",newString[]{"ht001"});
db.close();
8.查询记录
SQLiteDatabasedb=dbh.getReadableDatabase();
Cursorcursor=db.query("student",newString[]{"snum","sname","age","height"},"snum=?
",newString[]{"ht001","ht002"},"","","");
while(cursor.moveToNext()){
Stringsnum=cursor.getString(cursor.getColumnIndex("snum"));
Stringsname=cursor.getString(cursor.getColumnIndex("sname"));
intage=cursor.getInt(cursor.getColumnIndex("age"));
floatheight=cursor.getFloat(cursor.getColumnIndex("height"));
System.out.println("snum=="+snum+"name="+sname+"age="+age+"height="+height);
}
利用Android程序向服务器(servlet\action\webser