实践四 简单登录功能实现
【实践目的】
通过实践掌握文本控件、文本输入控件、checkbox控件的应用。学习掌握线程、Handler和进度条的基本功能。
【实践要求】
- 编程实现登录界面;
- 编程实现页面切换;
- 编程实现进度条模拟数据加载过程。
【任务和要求】
- 如图实现登录界面布局,点击登录按钮,模拟验证用户名和密码,成功跳转新页面,同时提示登录成功,不成功提示登录不成功,同时在登录界面旁边显示注册按钮。
- 实现用户注册功能(类似登录界面)
- 实现进度条模拟数据加载过程
【实践过程】
- 实现登录界面布局
- 设计和编写界面脚本login.xml,其中注册按钮属性设置为“GONE”
- 声明按钮、编辑框控件,并在OnCreate中通过findeViewbyId赋予对象
- 绑定确定按钮的点击事件
- 并在点击事件中检查用户名和密码的值,检查成功,弹出登录成功信息,并跳转新页面;检查不成功,弹出登录不成功信息,并显示注册按钮。
- 实现用户注册
- 设计和编写注册界面register.xml
- 模拟实现用户注册功能,通过StartActivityForResult方式切换到注册界面,注册信息通过setResult,返回到登录界面。
- 实现进度条模拟数据加载过程
添加布局progress.xlm,用于显示进度条
- 添加主页面布局main.xml,模拟显示主页面,如上图。
编写进度条框,对话框的视图progress.xml布局,参考代码如下:
创建线程,使用sleep函数模拟资源加载,通过消息发送进度条数据。
//private TextView cBoxStateTxt;
int mProgressStatus=0;
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.progress);
mProgress = (ProgressBar) findViewById(R.id.horizontal_pbar);
//设置监听按钮
//startpbarbtn = (Button)findViewById(R.id.start_pbar_btn);
//设置监视内容
//监听
new Thread(new Runnable() {
public void run() {
//推荐使用标志位使其不执行代码,不推荐使用true
while (FLAG) {
mProgressStatus = addNum();
// 更新进度条
// post方法推送一个Runnable到Handler,可以在此更新UI
mHandler.post(new Runnable() {
public void run() {
if (mProgressStatus < 100) {
mProgress.setProgress(mProgressStatus);
mProgressStatus++;
}
//执行完成后隐藏进度条并将标志设置为false
else {
mProgress.setVisibility(View.INVISIBLE);
FLAG = false;
if(MainActivity.usenameEdtxt.getText().toString().equals(a)&&
MainActivity.passwordEdtxt.getText().toString().equals(a)) {
Toast toast = Toast.makeText(getApplicationContext(),
"登录成功Usename:"+MainActivity.usenameEdtxt.getText().toString()+
"\nPassword:"+MainActivity.passwordEdtxt.getText().toString()+
"\ncheckbox状态:"+MainActivity.select,
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Intent it=new Intent();
Context packageContext;
it.setClass(ProgressActivity.this, LoginActivity.class);
ProgressActivity.this.startActivity(it);
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"登录失败Usename:"+MainActivity.usenameEdtxt.getText().toString()+
"\nPassword:"+MainActivity.passwordEdtxt.getText().toString()+
"\ncheckbox状态:"+MainActivity.select,
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Intent it=new Intent();
Context packageContext;
it.setClass(ProgressActivity.this, Activity.class);
ProgressActivity.this.startActivity(it);
}
finish();
}
}
});
}
}
private int addNum() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return mProgressStatus;
}
}).start();
//cBoxStateTxt.setText("CheckBox状态: "+mainActivity.select);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
usenameEdtxt=(EditText)findViewById(R.id.usename_edtxt);
passwordEdtxt=(EditText)findViewById(R.id.password_edtxt);
savePasswordCheckBox=(CheckBox)findViewById(R.id.save_password_checkBox);
submitButton=(Button)findViewById(R.id.submit_button);
//登录按钮监控
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String usename=usenameEdtxt.getText().toString();
String password=passwordEdtxt.getText().toString();
if(usename.isEmpty()){
usenameEdtxt.setError("用户名不能为空");
usenameEdtxt.requestFocus();
return;
}
if(password.isEmpty()){
passwordEdtxt.setError("密码不能为空");
passwordEdtxt.requestFocus();
return;
}
if(usename.length()>0&&password.length()>0){
Selectcheckbox=savePasswordCheckBox.isChecked();
if(Selectcheckbox)select="已勾选";
else select="未勾选";
Intent it=new Intent();
Context packageContext;
it.setClass(Activity.this, ProgressActivity.class);
Activity.this.startActivity(it);
}
}
});
}
}