Android: 将布局资源添加到库中仅用于测试
Android: Adding layout resource to library only for testing
在我的公共库代码中,我试图创建一个 inflater 助手来管理 ListView 中的多个视图。此代码旨在用于许多项目。
我想为以下代码编写单元测试,因为我需要创建一些 xml 布局。我知道 Android 库中可能有资源,但我希望该布局资源仅用于测试而不是随它一起提供。下面是我要测试的代码。
public abstract class ListViewItemHolder {
protected View itemView;
public View getItemView() {
return itemView;
}
public void initialize(View itemView) {
this.itemView = itemView;
copySubviews();
}
protected abstract void copySubviews();
}
public class ListViewItemInflater {
private LayoutInflater inflater;
private ArrayList<Pair<Integer, Class<ListViewItemHolder>>> viewHolders;
public ListViewItemInflater(Context context) {
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.viewHolders = new ArrayList<Pair<Integer, Class<ListViewItemHolder>>>();
}
public <T extends ListViewItemHolder> void registerViewHolder(int resourceId, Class<T> viewHolderClass) {
viewHolders.add(new Pair<Integer, Class<ListViewItemHolder>>(resourceId, (Class) viewHolderClass));
}
public <T extends ListViewItemHolder> T getViewHolder(View itemView, int index) {
if (itemView == null) {
Pair<Integer, Class<ListViewItemHolder>> viewInfo = viewHolders.get(index);
itemView = inflater.inflate(viewInfo.first, null);
try {
T viewHolder = (T) viewInfo.second.newInstance();
viewHolder.initialize(itemView);
itemView.setTag(viewHolder);
}
catch (Exception e) { /* TODO: Still to decide what to do here. */ }
}
return (T) itemView.getTag();
}
}
ListViewItemInflater 注册多个布局 ID 和视图持有者 classes 并按需膨胀列表项的视图并填充视图持有者 class。我已尝试自动处理列表项处理的视图持有者模式。
我想你可以用 shrinkResources
来做这个:
http://tools.android.com/tech-docs/new-build-system/resource-shrinking
在我的公共库代码中,我试图创建一个 inflater 助手来管理 ListView 中的多个视图。此代码旨在用于许多项目。
我想为以下代码编写单元测试,因为我需要创建一些 xml 布局。我知道 Android 库中可能有资源,但我希望该布局资源仅用于测试而不是随它一起提供。下面是我要测试的代码。
public abstract class ListViewItemHolder {
protected View itemView;
public View getItemView() {
return itemView;
}
public void initialize(View itemView) {
this.itemView = itemView;
copySubviews();
}
protected abstract void copySubviews();
}
public class ListViewItemInflater {
private LayoutInflater inflater;
private ArrayList<Pair<Integer, Class<ListViewItemHolder>>> viewHolders;
public ListViewItemInflater(Context context) {
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.viewHolders = new ArrayList<Pair<Integer, Class<ListViewItemHolder>>>();
}
public <T extends ListViewItemHolder> void registerViewHolder(int resourceId, Class<T> viewHolderClass) {
viewHolders.add(new Pair<Integer, Class<ListViewItemHolder>>(resourceId, (Class) viewHolderClass));
}
public <T extends ListViewItemHolder> T getViewHolder(View itemView, int index) {
if (itemView == null) {
Pair<Integer, Class<ListViewItemHolder>> viewInfo = viewHolders.get(index);
itemView = inflater.inflate(viewInfo.first, null);
try {
T viewHolder = (T) viewInfo.second.newInstance();
viewHolder.initialize(itemView);
itemView.setTag(viewHolder);
}
catch (Exception e) { /* TODO: Still to decide what to do here. */ }
}
return (T) itemView.getTag();
}
}
ListViewItemInflater 注册多个布局 ID 和视图持有者 classes 并按需膨胀列表项的视图并填充视图持有者 class。我已尝试自动处理列表项处理的视图持有者模式。
我想你可以用 shrinkResources
来做这个:
http://tools.android.com/tech-docs/new-build-system/resource-shrinking