Java 如何实现ContentProvider的getParent方法
我有一个树选择对话框的内容提供者。我需要实现getParent方法,以便在选中某个节点时选择树的根。代码如下:Java 如何实现ContentProvider的getParent方法,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我有一个树选择对话框的内容提供者。我需要实现getParent方法,以便在选中某个节点时选择树的根。代码如下: @SuppressWarnings("unchecked") protected Node<T> getAdapter(Object element) { if(element instanceof Tree) return ((Tree<T>)element).getRootElement(); else ret
@SuppressWarnings("unchecked")
protected Node<T> getAdapter(Object element) {
if(element instanceof Tree)
return ((Tree<T>)element).getRootElement();
else
return (Node<T>)element;
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
@Override
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof org.db.normalization.Table) {
if(((org.db.normalization.Table)parentElement).getStatus() == Status.DELETED)
return new Object[0];
List<org.db.normalization.Attribute> atts = new ArrayList<org.db.normalization.Attribute>();
for(Attribute a:((org.db.normalization.Table)parentElement).getAttributes().getAttributes())
if(a.getStatus() != Status.UNMODIFIED)
atts.add(a);
for(Attribute a:((org.db.normalization.Table)parentElement).getPrimaryKey().getAttributes())
if(a.getStatus() != Status.UNMODIFIED)
atts.add(a);
return atts.toArray();
} else if (parentElement instanceof org.db.normalization.Attribute) {
return new Object[0];
} else {
@SuppressWarnings("unchecked")
List<org.db.normalization.Table> n = (ArrayList<org.db.normalization.Table>)parentElement;
if (n.size() > 0) {
return n.toArray() ;
}
}
return new Object[0];
}
@Override
public Object getParent(Object element) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean hasChildren(Object element) {
// TODO Auto-generated method stub
return getChildren(element).length > 0;
}
@SuppressWarnings(“未选中”)
受保护的节点getAdapter(对象元素){
if(树的元素实例)
return((树)元素).getRootElement();
其他的
返回(节点)元素;
}
@凌驾
公共空间处置(){
//TODO自动生成的方法存根
}
@凌驾
public void inputChanged(查看器、对象oldInput、对象newInput){
//TODO自动生成的方法存根
}
@凌驾
公共对象[]getElements(对象inputElement){
返回getChildren(inputElement);
}
@凌驾
公共对象[]获取子对象(对象父元素){
if(parentElement instanceof org.db.normalization.Table){
if(((org.db.normalization.Table)parentElement).getStatus()==Status.DELETED)
返回新对象[0];
List atts=new ArrayList();
对于(属性a:((org.db.normalization.Table)parentElement).getAttributes().getAttributes())
if(a.getStatus()!=状态。未修改)
附件添加(a);
对于(属性a:((org.db.normalization.Table)parentElement).getPrimaryKey().getAttributes())
if(a.getStatus()!=状态。未修改)
附件添加(a);
返回atts.toArray();
}else if(parentElement instanceof org.db.normalization.Attribute){
返回新对象[0];
}否则{
@抑制警告(“未选中”)
列表n=(ArrayList)parentElement;
如果(n.size()>0){
返回n.toArray();
}
}
返回新对象[0];
}
@凌驾
公共对象getParent(对象元素){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共布尔hasChildren(对象元素){
//TODO自动生成的方法存根
返回getChildren(元素)。长度>0;
}
我真的不知道在getParent方法中要写什么,因为除了作为参数接收的元素之外,我没有其他信息,而这个元素本身并不知道它的父元素
谢谢 对于树实现的大多数实例,您确实知道自己的父级,因此父级要么由setter方法设置,要么在构造函数上设置。你不知道父节点是谁,所以你提出了更糟糕的情况,你基本上必须得到所有节点,并检查每个节点的子节点是否包含你。不确定
org.db.normalization.Table
是什么,但如果这是元素的类型,它“应该”有一个返回父节点的方法。如果不是,你就不走运了。