// ---------------------------------------
// Data binding DEBUG
-// AdapterBinding binding = new AdapterBinding();
+// AdapterBinding binding = new AdapterBinding(3);
// binding.addHeader(new ResourceReference("header", false));
// binding.addFooter(new ResourceReference("footer", false));
-// binding.addItem(new AdapterItemReference("listitem", false, 3));
-// binding.addItem(new AdapterItemReference("separator"));
+// DataBindingItem item = new DataBindingItem("groupitem", false, 3);
+// binding.addItem(item);
+// item.addChild(new DataBindingItem("separator", false, 1));
+// item.addChild(new DataBindingItem("listitem", false, 3));
// params.addAdapterBinding(new ResourceReference("listview"), binding);
// ---------------------------------------
package com.android.ide.common.rendering.api;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
/**
* Describe the content of the dynamic android.widget.Adapter used to fill
* android.widget.AdapterView
*/
-public class AdapterBinding {
-
- /**
- * An AdapterItemReference. On top of being a {@link ResourceReference}, it contains how many
- * items of this type the data binding should display.
- */
- public static class AdapterItemReference extends ResourceReference {
- private final int mCount;
-
- public AdapterItemReference(String name, boolean platformLayout, int count) {
- super(name, platformLayout);
- mCount = count;
- }
-
- public AdapterItemReference(String name, boolean platformLayout) {
- this(name, platformLayout, 1);
- }
-
- public AdapterItemReference(String name) {
- this(name, false /*platformLayout*/, 1);
- }
-
- public int getCount() {
- return mCount;
- }
- }
+public class AdapterBinding implements Iterable<DataBindingItem> {
private final int mRepeatCount;
private final List<ResourceReference> mHeaders = new ArrayList<ResourceReference>();
- private final List<AdapterItemReference> mItems = new ArrayList<AdapterItemReference>();
+ private final List<DataBindingItem> mItems = new ArrayList<DataBindingItem>();
private final List<ResourceReference> mFooters = new ArrayList<ResourceReference>();
public AdapterBinding(int repeatCount) {
return mHeaders.get(index);
}
- public void addItem(AdapterItemReference itemInfo) {
- mItems.add(itemInfo);
+ public void addItem(DataBindingItem item) {
+ mItems.add(item);
}
public int getItemCount() {
return mItems.size();
}
- public AdapterItemReference getItemAt(int index) {
+ public DataBindingItem getItemAt(int index) {
return mItems.get(index);
}
public ResourceReference getFooterAt(int index) {
return mFooters.get(index);
}
+
+ public Iterator<DataBindingItem> iterator() {
+ return mItems.iterator();
+ }
}
--- /dev/null
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.common.rendering.api;
+
+import com.android.resources.ResourceType;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A data binding item. It contain a {@link ResourceReference} to the view used to represent it.
+ * It also contains how many items of this type the AdapterView should display.
+ *
+ * It can also contain an optional list of children in case the AdapterView is an
+ * ExpandableListView. In this case, the count value is used as a repeat count for the children,
+ * similar to {@link AdapterBinding#getRepeatCount()}.
+ *
+ */
+public class DataBindingItem implements Iterable<DataBindingItem> {
+ private final ResourceReference mReference;
+ private final int mCount;
+ private List<DataBindingItem> mChildren;
+
+ public DataBindingItem(ResourceReference reference, int count) {
+ mReference = reference;
+ mCount = count;
+ }
+
+ public DataBindingItem(String name, boolean platformLayout, int count) {
+ this(new ResourceReference(name, platformLayout), count);
+ }
+
+ public DataBindingItem(String name, boolean platformLayout) {
+ this(name, platformLayout, 1);
+ }
+
+ public DataBindingItem(String name, int count) {
+ this(name, false /*platformLayout*/, count);
+ }
+
+ public DataBindingItem(String name) {
+ this(name, false /*platformLayout*/, 1);
+ }
+
+ /**
+ * Returns the {@link ResourceReference} for the view. The {@link ResourceType} for the
+ * referenced resource is implied to be {@link ResourceType#LAYOUT}.
+ */
+ public ResourceReference getViewReference() {
+ return mReference;
+ }
+
+ /**
+ * The repeat count for this object or the repeat count for the children if there are any.
+ */
+ public int getCount() {
+ return mCount;
+ }
+
+ public void addChild(DataBindingItem child) {
+ if (mChildren == null) {
+ mChildren = new ArrayList<DataBindingItem>();
+ }
+
+ mChildren.add(child);
+ }
+
+ public List<DataBindingItem> getChildren() {
+ if (mChildren != null) {
+ return mChildren;
+ }
+
+ return Collections.emptyList();
+ }
+
+ public Iterator<DataBindingItem> iterator() {
+ List<DataBindingItem> list = getChildren();
+ return list.iterator();
+ }
+}