我正在编写一个类似于AQuery的库,但具有用于操作元素的精致语法。
本质上,AQuery 所做的是安全地访问视图层次结构并允许您在 ImageView 和 TextView 等对象上调用子类方法。
我使用以下代码编写了一种使用 View 子类的通用方法:
我Query
的对象是用于操作视图层次结构的基础对象。基本格式如下所示:
public class Query {
private View mView;
// ...
}
接下来是通用接口。这是 Query 对象的内部接口:
private interface Operation<T extends View> {
public void execute(T view);
}
接下来是中的run
方法Query
。这将检查此查询表示的当前节点,execute
如果成功则调用 Operation 对象上的方法:
private <T extends View> Query run(Class<T> cls, Operation<T> operation) {
T t = cls.cast(mView);
if (t == null) {
Log.e(TAG, "view is not a " + cls.getSimpleName());
} else {
operation.execute(t);
}
return this;
}
所以现在模板代码已经写好了,我使用类似的方法来实现功能:
public Query text(final CharSequence str) {
return run(TextView.class, new Operation<TextView>() {
@Override
public void execute(TextView view) {
view.setText(str);
}
});
}
对于修改视图层次结构的每个方法,我都必须编写这个样板代码。
有什么方法可以重构此代码以使方法text
更简单?