7-24 页面逻辑

一、MainActivity

(一)整体结构(略package+import)

1.public class MainActivity extends Activity

1)声明成员变量

用private,使外部通过get/set方法来获取可以获取的内部数据。Layout里面有什么,activity需要用到什么,就声明什么

private EditText heightEditText;

private RadioGroup sexRadioGroup;

private Button resetButton;

private String sexString = "男";

*这里的sexString没有赋初值的话,下面的onCheckedChanged方法就会崩溃。因为默认是选择男,若果测试者不改变选项的话,其实sexString里是没有值的

2)入口方法 protected void onCreate(Bundle savedInstanceState) 

目录式结构。只列出会用到的方法

tip:声明完一个方法后,按Ctrl+1 自动创建方法。

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);//把mainactivity.java和activity_main.xml 联系在一起

fineViews();//从布局代码中找到相应的控件

setLisenter();//用于监听。

3)private void setLisenter()

监听方法。包含多个内部监听类。给按钮添加点击事件OnClickListener,要重写OnClickListener()方法。当按钮状态转换时系统会自动调用OnCheckedChangeListene方法

①sexRadioGroup.setOnCheckedChangeListener ( new OnCheckedChangeListener ( ) {  public void onCheckedChanged(RadioGroup arg0, int arg1 ) {}}      //设置RadioGroup状态转变时的监听。参数是监听对象,创建方法是直接new,然后重写OnCheckedChangeListener()的OnCheckedChangeListener方法

②startTestButton.setOnClickListener ( new OnClickListener ( ) { public void onClick( View v) {}})

4)private void fineViews()

寻找控件。基本上用到哪个控件,就要在此方法中 find 哪个控件。Ctrl+1 可以自动添加强制类型转换。

heightEditText = (EditText) findViewById(R.id.height_edt);

weightEditText = (EditText) findViewById(R.id.weight_edt);

sexRadioGroup = (RadioGroup) findViewById(R.id.sex_rg);

startTestButton = (Button) findViewById(R.id.start_test_btn);

resetButton = (Button) findViewById(R.id.reset_btn);

(二)局部细节

1.intent方法

(1)mainactivity

Intent intent = new Intent(MainActivity.this,BMIResultActivity.class);

跳转页面:通过intent类的对象实现,创建intent类对象实现,选择双参数构造方法new Intent(MainActivity.this,BMIResultActivity.class)。参数1:从哪个activity中起跳,参数2:跳到哪个activity中

intent.putExtra("height", height);

传递数据:向BMIactivity传递数据用于显示,把要传递的数据放入intent中intent.putExtra(arg1,arg2) arg1是键,arg2是值。通过arg1和arg2,就在intent中保存了一个键值对(一一对应),则可通过键去找相应的值。在取值时一定要保证键相同.

startActivity(intent);

实现跳转

(2)BMIResultActivity

Intent intent = getIntent();

取出上个页面的传递值

double height = intent.getDoubleExtra("height", 0);

从intent对象中,根据放入值的键来取相应值

DecimalFormat format = new DecimalFormat("0.00");

对数据进行格式化 DecimalFormat 构造参数:数据格式字符串。格式化成0.00的格式

bmiTextView.setText("您的BMI指数为"+format.format(bmi));

把数据显示到控件上

2.public void onCheckedChanged(RadioGroup arg0, int arg1)

参数①:状态改变的RadioGroup对象。参数②:RadioGroup对象中被选中的按钮的Id。根据参数2确定是哪个按钮被选中。内含switch方法或if方法

3.吐司 Toast.makeText()

Toast.makeText(MainActivity.this, "您选择的性别是"+sexString, 1).show();

参数1:上下文,说明在那个页面显示吐司。参数2:显示的内容。参数3:显示的时间(秒)

4.getText()

String heightString = heightEditText.getText().toString().trim();

用getText()取出输入内容,返回值是Editable对象可变字符串。用toString()将其转化为字符串,并用trim()方法去除其中没用的字符,如:回车。

5.类型转换

double height = Double.valueOf (heightString)/100;

6.set方法

bodyStateImageView.setBackgroundResource(R.drawable.bmi_4);

bodyStateTextView.setText("您现在处于:\n严重肥胖状态,请立刻减肥");

在bodyStateTextView这个TextView里放入图片和文字。

二、BMIResultActivity

(一)整体结构

findViews();



三、规范

(一)命名

1.变量命名

①全英文,不准有拼音

②首字母小写,之后所有单词的首字母大写(驼峰式命名法)

③遵循准则

④变量名后缀尽量不缩写,全拼(变量种类很多,可能有缩写相同, 无法区分)

2.类名:所有首字母都大写

(二)常识

1.Android 的界面叫activity,包含

1)名字Activity.java(逻辑代码) 一定是继承自activity类,页面逻辑,一般包含

1. onCreate(Bundle savedInstanceState) 加载页面时,Android系统调用,程序员只需在oncreate里写逻辑代码

2. public boolean onOptionsItemSelected(MenuItem item) 菜单逻辑

3.onOptionsItemSelected(MenuItem item) 菜单某一项被选中

2)名字.xml 页面的布局文件

2.代码书写流程。在写方法时,不要马上写方法主逻辑,应该先进行异常处理。当把所有异常处理完成后,再写主逻辑。

3.注意事项

1)判断字符串是否为空,用textUtils的isEmpty()方法,而不是用字符串本身(height.isEmpty)

2) 在代码中用到上下文作为参数进行传递时,一定要确定this确定的是那个类。

3) activity继承自Context,当有系统方法要求传递Context时,有可能就是传递activity。(Context有很多子类)

4)前端应用要遵循显示逻辑与数据运算逻辑分离,不能混在一起。activity理想状态只有控制页面显示的代码。

5) 通过对象来处理页面数据,做到数据逻辑与代码逻辑的分离

(三)调试

1.代码错误

当bug崩溃时,根据logCat的提示(找自己能看懂的代码,比如指示了哪一行出错的错误提示)。根据提示,在这几行打几个断点,用小虫debug。debug会停在断点处,鼠标放上去会浮现变量值等具体情况。之后可用步入等一步步调试。

如果是数据出错,则顺着数据流一步步查看。(比如BMI项目中的sexString。程序崩溃是因为sexString没有赋初值)

2.代码没找出错误

或许编译时出现混乱,点project->clean... 清空编译。在点击右上角DDMS,左侧菜单栏的扩展项目里有“reset adb”。再重新编译。

3.异常处理

在写主逻辑前先进行异常处理,如BMI项目中未输入值便点击测试按钮

if (TextUtils.isEmpty(heightString)) {

heightEditText.setError ("请输入身高");

return;}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容