zoukankan      html  css  js  c++  java
  • 《移动平台开发实践》第7周学习总结

    20189208 2018-2019-2 《移动平台开发实践》第7周学习总结

    教材学习内容总结

    需求:

    • 用户需求:用户提出的。
    • 产品需求:由用户需求提炼出的需求。

    需求分析一般步骤:

    1. 挖掘真实需求;(更快的马车)
      目标用户
      使用场景
      想要解决的问题
    2. 提出解决方案
    3. 筛选和验证方案

    软件项目需求分析

    1. 收集需求
    2. 分析需求:表层需求→深层需求→底层需求
    3. 需求评价
    4. 需求设计
    5. 验证需求

    产品经理常用软件

    • Axure RP
    • 墨刀
    • 石墨文档

    第27章主要介绍了5种控件布局方法:

    • LinearLayOut-水平垂直布局,一维排列,相对与父布局
    • RelativeLayOut-相对布局,一维排列,相对于同级布局
    • FrameLayOut-重叠重叠布局,可上下重叠填白
    • TableLayOut-表格布局,二维排列,相对于父布局
    • GridLayOut-网格布局-二维网格排列,相对于父布局

    第28章主要介绍了如何处理事件和编写监听器(event listener)监听点击、长按、触碰、按键等。

    • OnClickListener-onClick()
    • OnLongClickLisner-OnLongClick()
    • OnFocusChangeListener-focusChange()
    • OnKeyListener-onKey()
    • OnTouchListener- onTouch()

    第29章主要介绍了为操作栏添加溢出、操作和下拉式导航、为溢出添加操作,添加回退功能。
    第30章主要介绍了菜单的三种类型

    • 选项菜单-可添加到溢出,不需监听器
    • 上下文菜单
    • 弹出式菜单

    教材学习中的问题和解决过程

    • 问题0:GridLayOut的作用和TableLayOut的区别和优势?为什么不直接用TableLayOut?
    • 问题0解决方案:
    TableLayout GridLayOut
    平分 ×
    水平&垂直 同时对齐 ×
    跨行列布局 ×
    控件自动换行 ×
    空白网格 ×
    直接使用
    extend LinarLayOut
    • 问题1:Bundle;
    • 问题1解决方案:
      Bundle类一个final类,是一个key-value对,“A mapping from String values to various Parcelable types.”
      两个activity之间的通讯可以通过bundle类来实现
    Bundle mBundle = new Bundle();   
    //bundle类中加入数据(key -value的形式,另一个activity里面取数据的时候,就要用到key,找出对应的value)
    mBundle.putString("Data", "data from TestBundle"); 
    //新建一个intent对象,并将该bundle加入这个intent对象
    Intent intent = new Intent(); 
    ntent.setClass(TestBundle.this, Target.class);
    intent.putExtras(mBundle);
    
    • 问题2:onTouch与onClick的关系?
    • 问题2解决方案:onTouch与onClick的关系
    • 问题3:log.d的作用,log的用法;
    • 问题3解决方案:
      Log日志系统:通过logcat查看日志
      Log.v 调试颜色-黑色,输出-任何消息,v-verbose啰嗦的意思,使用-平时Log.v("","");
      Log.d 输出颜色-蓝色,输出-调试、上层的信息,d-debug,使用-过滤起来可以通过DDMS的Logcat标签来选择;
      Log.i 输出颜色-绿色,输出-一般提示性消息,显示i、w和e的信息,不会输出Log.v和Log.d的信息,i-information;
      Log.w 输出颜色-橙色,输出-Log.e的信息,w-warning警告,使用-一般需要我们注意优化Android代码;
      Log.e为红色,输出-错误,e-error.
    Log.d(tag, message);
    
    /*快捷输入 | 对应级别 
    logv + Tab | verbose
    logd + Tab | debug
    logi + Tab | info
    logw + Tab | warn
    loge + Tab | error  */
    
    • 问题4:AppCompatActivity比Activity
    • 问题4解决方案:
      AppcompaActivity就是ActionBarActivity;
      Eclipse-自动继承Activity;Android Studio-自动继承AppCompatActivity;若修改AS的AppCompatActivity为Activity并导入相关的包,则顶端ToolBar会消失。
      主界面带有toolbar的标题栏;
      theme主题只能用
    android:theme=”@style/AppTheme
    

    (appTheme主题或者其子类),而不能用android:style。 否则会提示错误:

    Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
    /*
    关系可以这么形容:AppCompatActivity————>FragmentActivity————>Activity。
    */
    
    • 问题5:Logcat
    • 问题5解决方案:根据log的TAG过滤消息,运行程序之前创建。
    • 问题6:setContentView(R.layout.activity_test_view);做了什么?
    • 问题6解决方案:把布局添加到了android.R.id.content对应的布局中;
    • 问题7:onCreate中Bundle saveInstanceState的作用
    • 问题7解决方案:savedInstanceState-保存实例的状态-保存着Activity的状态。onsaveInstanceState方法是用来保存Activity的状态。
      个游戏在退出前,保存一下当前游戏运行的状态,当下次开启时能接着上次的继续玩下去。电子书程序,当一本小说被阅读到第199页后退出了(不管是内存不足还是用户自动关闭程序),当下次打开时,能够回到上次的位置。
    
    public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInsanceState);
    }
    
    

    代码调试中的问题和解决过程

    • 问题1:如何同时监听多个button实现activity跳转
    • 问题1解决方案:onClick()只能Override一次,可以使用switch、case实现监听作用。
    private class ButtonListener implements View.OnClickListener {
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btn1_1:
                        Intent a = new Intent(MainActivity.this, LinearLayOut1.class);
                        startActivity(a);
                        break;
                    case R.id.btn1_2:
                        Intent b = new Intent(MainActivity.this, LinearLayOut2.class);
                        startActivity(b);
                        break;
                    case R.id.btn1_3:
                        Intent c = new Intent(MainActivity.this, LinearLayOut3.class);
                        startActivity(c);
                        break;
                    case R.id.btn2:
                        Intent d = new Intent(MainActivity.this, RelativeLayOut.class);
                        startActivity(d);
                        break;
                    case R.id.btn3:
                        Intent e = new Intent(MainActivity.this, FrameLayOut.class);
                        startActivity(e);
                        break;
                    case R.id.btn4:
                        Intent f = new Intent(MainActivity.this, TableLayOut.class);
                        startActivity(f);
                        break;
                    case R.id.btn5
                        Intent g = new Intent(MainActivity.this, GridLayOut.class);
                        startActivity(g);
                        break;
                    default:
                        break;}
            }}
    
    • 问题2:断点调试时出现“Frames are not available.class代码和xml代码都没问题
    • 问题2解决方案:低级错误,忘记在清单添加activity。

    代码托管

    上周考试错题总结

    • 错题1:假如下面的类的private成员都有合适的public getter/setter,类的实例serialized and 和 deserialized后哪些成员会是null?
    public class Zebra implements Serializable {
        private static final long serialUID = 1L;
        private transient String name = "George";
        private static String birthPlace = "Africa";
        private transient Integer age;
        private java.util.List<Zebra> friends = new java.util.ArrayList<>();
        private Object tail = null;
        { age = 10;}
        public Zebra() {
            this.name = "Sophia";}
        }   }//name age
        /*代码编译并运行没有问题,alUID与serialVersionUID不同,serialVersionUID是推荐的修补,但不是必需的,这不构成任何编译问题。序列化过程不会使用serialUID进行版本控制。能力和年龄变量都是瞬态的,这意味着它们的值不会被保存。Upon deserialization,默认的初始化和构造函数将是跳过,它们都将为空.*/
    
    • 错题2:有什么理由必须要用字符流?
      处理字符数据的语法更方便
      自动化字符编码
    • 错题3:Which stream classes are high-level?
      ObjectInputStream、PrintStream、PrintWriter、ObjectOutputStream

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 ----- ----- -----
    第二周 180/180 2/3 18/18
    第三周 429/609 1/4 24/42
    第四周 588/1197 2/6 30/72
    第五周 548/1745 1/7 20/92
    第六周 15934/17679 2/9 20/112
    第七周 2390/20310 1/10 18/130

    参考资料

  • 相关阅读:
    Django中文无法转换成latin-1编码的解决方案
    JS-排序详解:冒泡排序、选择排序和快速排序
    javascript实例
    selenium webdriver 启动三大浏览器Firefox,Chrome,IE
    javascript教程5:--BOM操作
    python----图像简单处理(PIL or Pillow)
    Python模块学习之bs4
    采集淘宝美人库
    JavaScript 中的FileReader对象(实现上传图片预览)
    WPF
  • 原文地址:https://www.cnblogs.com/Ychancy/p/10699272.html
Copyright © 2011-2022 走看看