/* * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) * * 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 greendroid.widget.item; import greendroid.widget.itemview.ItemView; import java.io.IOException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.ListView; import com.cyrilmottier.android.greendroid.R; /** * Base class for all items used in GreenDroid. An item represents a wrapper of * data. Each item contains at least all the information needed to display a * single row in a {@link ListView}. * * @author Cyril Mottier */ public abstract class Item { private SparseArray<Object> mTags; private Object mTag; /** * Set to true when this item is enabled? */ public boolean enabled; /** * Constructs a new item. */ public Item() { // By default, an item is enabled enabled = true; } /** * Returns the tag associated to that item. * * @return The tag associated to this item. */ public Object getTag() { return mTag; } /** * Sets the tag associated with this item. A tag is often used to store * extra information. * * @param tag The tag associated to this item */ public void setTag(Object tag) { mTag = tag; } /** * Returns the tag associated with this item and the specified key. * * @param key The key of the tag to retrieve * @return The tag associated to the key <em>key</em> or null if no tags are * associated to that key */ public Object getTag(int key) { return (mTags == null) ? null : mTags.get(key); } /** * Sets a tag associated with this item and a key. A tag is often used to * store extra information. * * @param key The key for the specified tag * @param tag A tag that will be associated to that item */ public void setTag(int key, Object tag) { if (mTags == null) { mTags = new SparseArray<Object>(); } mTags.put(key, tag); } /** * Returns a view that is associated to the current item. The returned view * is normally capable of being a good recipient for all item's information. * * @param context The context in which the {@link ItemView} will be used * @param parent The parent view of that new view. It is usually the parent * ListView * @return A new allocated view for the current Item */ public abstract ItemView newView(Context context, ViewGroup parent); /** * Helper method to inflate a layout using a given Context and a layoutID. * * @param context The current context * @param layoutID The identifier of the layout to inflate * @return A newly inflated view */ protected static ItemView createCellFromXml(Context context, int layoutID, ViewGroup parent) { return (ItemView) LayoutInflater.from(context).inflate(layoutID, parent, false); } public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, IOException { TypedArray a = r.obtainAttributes(attrs, R.styleable.Item); enabled = a.getBoolean(R.styleable.Item_enabled, enabled); a.recycle(); } }