几天学习的笔记,没能整理组织有点乱,若有错误不准确的地方望能有人指出。
3、RadioGroup
RadioGroup是多个单选项目的控件,如注册信息时男女选择控件。一个RadioGroup容器内可有多个RadioButton控件,但只要给RadioGroup设置监听器。具体实现示例如下:
布局文件:
<RadioButton
android:id="@+id/maleRaButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/male" />
<RadioButton
android1:id="@+id/femaleRaButton"
android1:layout_width="wrap_content"
android1:layout_height="wrap_content"
android1:text="@string/female" />
</RadioGroup>
消息监听部分(此处采用内部类的实现方式):
genderRaGroup.setOnCheckedChangeListener(new GenderGroupOnCheckedChangeListener());
private class GenderGroupOnCheckedChangeListener implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO 自动生成的方法存根
if(maleRaButton.getId()==checkedId){
customerGender=Register_1.this.getString(R.string.male);//加双引号将int转换成string类型
Toast.makeText(Register_1.this,customerGender, Toast.LENGTH_SHORT).show();
}
else if(femaleRaButton.getId()==checkedId){
customerGender=Register_1.this.getString(R.string.female);//加双引号将int转换成string类型
Toast.makeText(Register_1.this,customerGender, Toast.LENGTH_SHORT).show();
}
else
{
customerGender="genderError";
Toast.makeText(Register_1.this,"genderError", Toast.LENGTH_SHORT).show();
}
}
}
也可采用匿名内部类的方式,但在匿名内部类中使用
外部类组件时出错故不使用。
4、Toast短暂显示提示内容
Toast可短暂的时间内显示内容,如启用联网程序时提示无可用网络等。实现方式如下:
Toast toast=Toast.makeText(Register_1.this,customerGender, Toast.LENGTH_SHORT);第一个参数为context容器对象,第一个为要显示的字符串,第三个问显示的时间常量,有些版本仅提供LENGTH_SHORT和LENGTH_LONG两个常量。
可通过toast.show()方法显示出来。
可通过toast.setView(View);设置自定义样式。
5、CompoundButton/CheckedBox/Progress教程01_12至01_13
进度条progressBar布局文件示例:
Progress设置进度方法:bar.setProgress(Int int);
设置进度条可见:bar.setVisibility(View.VISIBLE);
6、Handler(01_14教程)
handler的post方法可将创建的线程加入线程队列队列,removeCallBack(View v);方法从队列中移除;
Handler的sendMessage(Msg);方法可以将消息加入消息队列,handler获取系统消息:
Message msg=handler.obtainMessage();即可得到两个消息msg.arg1和msg.arg2。
Android操作系统提供Message类,可传递消息。
1)首先创建Handler
Handler handler=new Handler();
2)创建线程
创建线程有两种方式:1、继承Tread的类;2、实现runnable接口;
实现runnable接口实现run()方法示例:
Runnable thread=new Runnable(){
@override
Public void OnClick(View v){
/*线程处理程序,如下载过程*/
Handler.post(thread,2000);//延时2000毫秒将线程thread加入线程队列
Handler.post(thread);//立即将线程thread加入线程队列
}
}//该线程因为没有复写start()方法所以没有创建新的线程,仅实现了接口Runnable的run方法,实际上是在主线程中直接执行了run()方法,而没有执行创建新的线程。
FAQ
1、app下载到模拟器中一直异常退出
(项目registerActivity的Register_1)
原因:可以确定不是布局文件内容及其配置的问题,而是主程序***activity.java中的错误导致;进一步测试发现当RadioButton按下时程序异常退出得知为RadioGroup设置的监听器有问题;进一步发现是使用匿名内部类作为监听器导致错误。
解决办法:使用内部类代替匿名内部类,如下:
genderRaGroup.setOnCheckedChangeListener(new GenderGroupOnCheckedChangeListener());
}
private class GenderGroupOnCheckedChangeListener implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO 自动生成的方法存根
if(maleRaButton.getId()==checkedId){
//customerGender=R.string.male+"";//加双引号将int转换成string类型
}
else if(femaleRaButton.getId()==checkedId){
//customerGender=R.string.female+"";//加双引号将int转换成string类型
}
else
customerGender="genderError";
Toast.makeText(Register_1.this,customerGender, Toast.LENGTH_LONG).show();
}
}
2、Logcat为空,看不到System.out信息
原因猜想:可能是logcat分配的存储空间的问题导致eclipse运行几个程序后就不能继续写日志了。
解决办法:先关闭Logcat,再重启eclipse,然后重新打开Logcat(在window->showView->other->Log)