package net.tasksnow.view.slidingmenu; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import net.tasksnow.view.reuse.GenericListAdapter; import net.tasksnow.view.reuse.GenericListAdapter.ListItem; import net.tasksnow.view.slidingmenu.MenuContent.MenuCategory; import com.luma.android.andrologger.Logger; import java.util.ArrayList; import java.util.List; /** * @author D056943 * @since 01:21:10 - 29.12.2012 * @project cFoldersDemo */ public class SlidingMenuListView extends ListView implements AdapterView.OnItemClickListener, OnListItemStateChangeListener { // =========================================================== // Listener // =========================================================== public interface OnCategorySelectListener { public void onCategorySelected(Object executeObject); } private OnCategorySelectListener categorySelectListener; // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private MenuContent menuContent; private GenericListAdapter listAdapter; // =========================================================== // Constructors // =========================================================== public SlidingMenuListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.setOnItemClickListener(this); if (this.getAdapter() == null) { this.listAdapter = new GenericListAdapter(this.getContext(), 3); } } public SlidingMenuListView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SlidingMenuListView(Context context) { this(context, null); } // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override public void onItemClick(AdapterView<?> adapter, View view, int pos, long id) { Object item = this.getAdapter().getItem(pos); if (item instanceof MenuItem) { MenuItem menuItem = (MenuItem) item; if (menuItem.isEnabled()) { this.menuContent.cleanSelection(menuItem); Object executeObject = this.menuContent.getSelectedItem().onExecuteAction(); this.invalidateViews(); if (this.categorySelectListener != null) { this.categorySelectListener.onCategorySelected(executeObject); } } } } // =========================================================== // Methods // =========================================================== public void setMenuContent(MenuContent content) { content.setOnListItemStateChangeListener(this); this.menuContent = content; } public MenuContent getMenuContent() { return this.menuContent; } public void updateListAdapter() { this.listAdapter.clear(); Logger.i("updateListAdadpter"); List<ListItem> items = new ArrayList<ListItem>(); for (MenuCategory category : this.menuContent.getCategories()) { //Project specific Code if (category.getItems().size() > 0) { ((MenuSectionItem) category.getCategoryItem()).setExpandable(true); //TODO auslagern } items.add(category.getCategoryItem()); if (((MenuSectionItem) category.getCategoryItem()).isExpanded()) items.addAll(category.getItems()); } this.listAdapter.addAll(items); if (this.getAdapter() == null) this.setAdapter(this.listAdapter); this.listAdapter.notifyDataSetChanged(); } // =========================================================== // Getter & Setter // =========================================================== public void setOnCategorySelectListener(OnCategorySelectListener categorySelectListener) { this.categorySelectListener = categorySelectListener; } // =========================================================== // Inner and Anonymous Classes // =========================================================== public interface MenuItem extends ListItem { public void setSelected(boolean selected); public void setOnListItemStateChangeListener(OnListItemStateChangeListener listItemStateChangeListener); public boolean isSelected(); public Object onExecuteAction(); } @Override public void onListItemStateChange(ListItem listItem) { this.updateListAdapter(); } }