安卓开发系列 之适配器模式

安卓开发中对于数据源有两种填充模式:
对于固定数据:如strings.xml中的string-array,使用android:entries填充;
对于动态数据:Java数组或者database,使用adapter填充。

适配器设计模式:
通常接口中有许多方法,程序不一定用到所有方法,但是在使用implements实现接口时必须重写所有的方法;适配器就是一个类,简化了以上操作,实现了监听器接口并重写了所有方法,只是所有的方法都是空的。适配器需要定义成抽象类,因为如果直接用它创建对象调用空方法没有意义,优势是复用性/灵活性/扩展性好,符合开闭原则(拓展开放,修改封闭)。

适配器的两种写法为(基本适配器):

//第一种写法:
//Drink为定义的饮料类,Drink.drinks为实现的Drink类对象数组
ArrayAdapter<Drink> listAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,Drink.drinks);
//找到布局中的ListView
ListView listDrinks = findViewById(R.id.list_drinks);
//填充适配器
listDrinks.setAdapter(listAdapter);

//第二种写法:利用匿名内部类实现
((ListView)findViewById(R.id.list_drinks)).setAdapter(
                new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,Drink.drinks)
);

补充匿名内部类:
就是内部类的简化写法,前提是存在一个类或者接口,这里的类可以是具体类,也可以是抽象类。
格式:new 类名或者接口名() {重写方法;}
本质:是一个继承了该类或者实现该接口的子类匿名对象。
匿名内部类在开发中经常被当作参数传递:如:

public static void main(String[] args){
    
    
	Demo d = new Demo();
	d.method(new c(){
    
    
		public void show(){
    
    
			System.out.println("AAA");
		}
	});
}

内部类(在类中定义的类):
访问特点:
内部类可以直接访问外部类的成员,包括私有成员;
外部类要访问内部类的成员必须创建对象;
外部类名.内部类名 对象名 = 外部类对象.内部类对象
O.I oi = new O().new I();

参考资料:
https://www.icourse163.org/learn/BFU-1205989803?tid=1450759471&from=study#/learn/content 移动开发技术MOOC课程

猜你喜欢

转载自blog.csdn.net/langxiaolin/article/details/113881243