是否可以跳过populateItem()
中的项目?例如通过在项目组件上设置某些内容,或其他任何内容。
ListView view = new ListView("quickLinks", quickLinks) {
@Override
protected void populateItem( ListItem item ){
if( item.getModel(). /*something*/ )
item.skip()
}
};
由于
答案 0 :(得分:10)
我更愿意过滤我的模型而不是在视图中进行if / else检查。
在这里,使用这个抽象类:
public abstract class FilteredListModel<K> extends LoadableDetachableModel<List<K>>{
private static final long serialVersionUID = 1L;
private IModel<List<? extends K>> inner;
@Override
protected void onDetach(){
inner.detach();
}
public FilteredListModel(IModel<List<? extends K>> inner){
this.inner = inner;
}
public FilteredListModel(List<? extends K> inner){
this.inner = Model.ofList(inner);
}
@Override
protected final List<K> load(){
List<? extends K> input = inner.getObject();
List<K> result = new ArrayList<K>(input.size());
for(K k : input){
if(accept(k))result.add(k);
}
return result;
}
protected abstract boolean accept(K k);
}
现在将列表模型包装到其中:
ListView<String> view = new ListView<String>(
"quickLinks",
new FilteredListModel<String>(quickLinks){
protected boolean accept(String value){
return yourCheckHere();
}
}) {
@Override
protected void populateItem( ListItem<String> item ){
// no ifs here
}
};
答案 1 :(得分:2)
item.setVisible(false)
不会有效吗?
答案 2 :(得分:1)
您可以覆盖ListView
中的iterator()
方法,以便只迭代您要呈现的项目。