“封装”的概念。
--------------------------------
封装是面向对象的三大特征(封装、继承、多态)之一。
封装的具体表现是“装”与“封”。
装:将一组相关的属性和方法编写在一个类中。
封:使用相对比较严格的访问权限修饰各个属性,并提供相对宽松的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中,添加
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
--------------------------------
优点:
自由度大
缺点:
难度大