[AKTUALISIERT] Wenn Sie wollen CUSTOMIZE die (+) - Zeichen und andere Attribute jeder Zeile eines TreeFieldanstatt Ihren eigenen Baum Feld Schreiben dann können Sie versuchen, neu zu schreiben, die drawTreeItem Methode von TreeFieldCallback wie unten dargestellt:
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.TreeField;
import net.rim.device.api.ui.component.TreeFieldCallback;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
public class TreeDemo extends MainScreen {
int parent[] = {1,2,3,4,5,6,7,8,9};
int child[][] = new int [10][10];
int child_child[][][] = new int [10][10][10];
int rowHeight = 27;
CustomTreeFieldCallback treeCallback = new CustomTreeFieldCallback();
VerticalFieldManager vm = new VerticalFieldManager(Field.FOCUSABLE | VERTICAL_SCROLL | VERTICAL_SCROLLBAR);
TreeField myTree = new TreeField(treeCallback, Field.FOCUSABLE);
public TreeDemo() {
vm.add(new LabelField("Table:"));
myTree.setRowHeight(rowHeight);
myTree.setIndentWidth(15);
myTree.setDefaultExpanded(false);
for(int i = parent.length-1; i >= 0 ; i--) {
parent[i] = myTree.addChildNode(0, "Parent_" + (i+1));
child[i] = new int[4];
for(int j = child[i].length-1; j >=0 ; j--) {
child[i][j] = myTree.addChildNode(parent[i], "Child_"+ (i+1) + "_" + (j+1));
child_child[i][j] = new int[3];
for(int k = child_child[i][j].length-1; k >= 0 ; k--) {
child_child[i][j][k] = myTree.addChildNode(child[i][j], "Child_of_Child_"+ (i+1) + "_" + (j+1)+ "_" + (k+1));
}
}
}
vm.add(myTree);
add(vm);
}
private class CustomTreeFieldCallback implements TreeFieldCallback {
public void drawTreeItem(TreeField treeField, Graphics graphics, int node,
int y, int width, int indent) {
// TODO Auto-generated method stub
String string = (String) treeField.getCookie(node);
int preservedColor = graphics.getColor();
if(treeField.getCurrentNode() == node) {
graphics.setColor(0x0CCCC0);
} else {
graphics.setColor(0x404040);
}
graphics.fillRect(0, y, Display.getWidth(), treeField.getRowHeight());
Bitmap iconImage;
int iconImageWidth = 0;
indent -= 20; // decrease the extra indentation for all nodes.
if(treeField.getFirstChild(node) != -1){ // if the node is not a leaf node
if(treeField.getExpanded(node)) {
iconImage = Bitmap.getBitmapResource("icon_arrow_down.png");
iconImageWidth = iconImage.getWidth();
} else {
iconImage = Bitmap.getBitmapResource("icon_arrow_right.png");
iconImageWidth = iconImage.getWidth();
}
graphics.drawBitmap(indent, y, indent+iconImageWidth, treeField.getRowHeight(), iconImage, 0, 0);
}
if(treeField.getCurrentNode() == node) {
graphics.setColor(0x404040);
} else {
graphics.setColor(0x0CCCC0);
}
graphics.drawText(string, indent+iconImageWidth, y);
graphics.setColor(preservedColor);
}
}
}
Ok !!!! .. cool code @HeartBeat: Aber wenn es Kindknoten in den Kindknoten gibt, wird es dann überschrieben? – Yatin
@Yatin K, Der vorherige Code hätte auch "Kindknoten innerhalb der Kindknoten" unterstützt, aber es gab ein kleines Problem mit dem Eindruck, dass ich zuvor nicht berücksichtigt habe. Jetzt habe ich den Code aktualisiert und dieses Problem behoben, überprüfen Sie es !! –
Hallo, bitte beantworten Sie die folgende Frage zu dieser Frage. http://stackoverflow.com/questions/17723328/parent-node-orchildnode-in-blackberry-tree-field – Yatin