安卓基础学习笔记(三)

/ 0评 / 0

“封装”的概念。
--------------------------------
封装是面向对象的三大特征(封装、继承、多态)之一。
封装的具体表现是“装”与“封”。
装:将一组相关的属性和方法编写在一个类中。
封:使用相对比较严格的访问权限修饰各个属性,并提供相对宽松的set和get方法。

public class Person {
  public String from;
  public String name;
  public int height;
  public float weight;
  
  void run() {}
  void eat() {}
}
直接“装”却不“封”的弊端:
public class Test {
  public static void main(String[] a) {
    Person p = new Person();
    p.from = "Beijing";
    p.name = "ChengHeng";
    p.height = 1770; // 合法却不合理
    p.weight = 68.5f;
  }
}
正确的“封”了之后:
public class Person {
  // ...
  private int height; // 使用private
  
  public void setHeight(int personHeight) {
    if(personHeight < 20 || personHeight > 250) {
      height = -1;
    } else {
      height = personHeight;
    }
  }
  
  public int getHeight() {
    return height;
  }
  // ...
}

public class Test {
  public static void main(String[] args) {
    Person p = new Person();
    // p.height = 177; // 错误,不允许访问私有成员
    p.setHeight(1770); // 正确
    
    // System.out.println(p.height); // 错误
    System.out.println(p.getHeight());
  }
}

访问权限修饰符:用于修饰类的成员,当修饰普通的类时,只能使用public或者默认权限(即没有修饰符)。
public:任意访问
protected:同包的各个类之间,子类可以访问
(空):同包的各个类之间可以访问
private:仅类的内部可以访问

关于“仿团购APP的底部菜单_2”
----------------------------------
反复点击同一个按钮,不应该反复执行代码:
1. 如果已经点击了“团购”,则禁用“团购”按钮,启用其它按钮
2. 重新配置各按钮图片的selector,如果禁用(android:state_enabled=false),则显示为彩色,如果启用(android:state_enabled=true),则显示黑白

ListView控件:列表控件
--------------------------------
ListView是以列表的形式呈现数据的控件,表现为控件内部的数据呈“横排”排列,且每条数据都比较相似。

显示ListView的4个要素
--------------------------------
1. ListView控件,容器,用于承载若干个列表项
2. 数据,通常是List集合,用于确定需要显示在列表中的数据内容
3. 模板,即res\layout下的xml文件,用于约定每一条数据呈现的样式
4. Adapter,适配器,作用是“组装工人”,用于组装每一条数据与模板,得到需要显示的内容,最后这些内容将显示在ListView中

开发ListView的流程
--------------------------------
1. 在activity_main.xml中,添加节点,并配置android:id、android:layout_width、android:layout_height属性
2. 声明并初始化ListView
3. 声明List集合,用于保存需要显示的数据,并创建对象,添加数据
4. 在res\layout下,创建新的xml文件,如果使用ArrayAdapter,则根节点选择TextView,如果使用其它Adapter,则自由设计
5.
如果使用ArrayAdapter,声明ArrayAdapter,并创建对象,构造方法的第1个参数为MainActivity.this,第2个参数为R.layout.???(步骤4创建的文件),第3个参数为List集合(步骤3创建的对象)
如果使用SimpleAdapter,则声明,并通过构造方法创建对象,其中,构造方法的第1个参数为MainActivity.this,第2个参数为数据(步骤3创建的对象),第3个参数为R.layout.???(步骤4创建的文件),第4个参数为String[],值为Map中各个key,例如{ "name", "number" },第5个参数为int[],值为模板中显示数据的控件的ID,例如{ R.id.tv_contact_item_name, R.id.tv_contact_item_number }
6. 调用ListView对象的setAdapter()方法,为ListView配置Adapter,该方法的参数为步骤5创建的对象

ArrayAdapter
--------------------------------
优点:
简单
缺点:
模板单一,控件单一,只能显示数据单一的列表

SimpleAdapter
--------------------------------
优点:
简单,模板虽然单一,但是可以自由设计,可以在每一个列表项中呈现多种数据
缺点:
模板单一,只能使用固定的1个模板

BaseAdapter
--------------------------------
优点:
自由度大
缺点:
难度大

评论已关闭。