Android Open Source - saldo Sectioned Adapter






From Project

Back to project page saldo.

License

The source code is released under:

GNU General Public License

If you think the Android project saldo listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/***
   Copyright (c) 2008-2010 CommonsWare, LLC
  portions Copyright (c) 2008-10 Jeffrey Sharkey
/*from   w  w  w .  ja  v a  2  s .  co  m*/
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.adrup.util;

import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;

abstract public class SectionedAdapter extends BaseAdapter {
  abstract protected View getHeaderView(String caption, int index, View convertView, ViewGroup parent);

  private List<Section> sections = new ArrayList<Section>();
  private static int TYPE_SECTION_HEADER = 0;

  public SectionedAdapter() {
    super();
  }

  public void addSection(String caption, Adapter adapter) {
    sections.add(new Section(caption, adapter));
  }
  
  public void clear() {
    sections.clear();
  }

  public Object getItem(int position) {
    for (Section section : this.sections) {
      if (position == 0) {
        return (section);
      }

      int size = section.adapter.getCount() + 1;

      if (position < size) {
        return (section.adapter.getItem(position - 1));
      }

      position -= size;
    }

    return (null);
  }

  public int getCount() {
    int total = 0;

    for (Section section : this.sections) {
      total += section.adapter.getCount() + 1; // add one for header
    }

    return (total);
  }

  public int getViewTypeCount() {
    int total = 1; // one for the header, plus those from sections

    for (Section section : this.sections) {
      total += section.adapter.getViewTypeCount();
    }

    return (total);
  }

  public int getItemViewType(int position) {
    int typeOffset = TYPE_SECTION_HEADER + 1; // start counting from here

    for (Section section : this.sections) {
      if (position == 0) {
        return (TYPE_SECTION_HEADER);
      }

      int size = section.adapter.getCount() + 1;

      if (position < size) {
        return (typeOffset + section.adapter.getItemViewType(position - 1));
      }

      position -= size;
      typeOffset += section.adapter.getViewTypeCount();
    }

    return (-1);
  }

  public boolean areAllItemsSelectable() {
    return (false);
  }

  public boolean isEnabled(int position) {
    return (getItemViewType(position) != TYPE_SECTION_HEADER);
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    int sectionIndex = 0;

    for (Section section : this.sections) {
      if (position == 0) {
        return (getHeaderView(section.caption, sectionIndex, convertView, parent));
      }

      int size = section.adapter.getCount() + 1;

      if (position < size) {
        return (section.adapter.getView(position - 1, convertView, parent));
      }

      position -= size;
      sectionIndex++;
    }

    return (null);
  }

  @Override
  public long getItemId(int position) {
    return (position);
  }

  class Section {
    String caption;
    Adapter adapter;

    Section(String caption, Adapter adapter) {
      this.caption = caption;
      this.adapter = adapter;
    }
  }
}




Java Source Code List

com.adrup.http.EasySSLSocketFactory.java
com.adrup.http.EasyX509TrustManager.java
com.adrup.http.HttpException.java
com.adrup.http.HttpHelper.java
com.adrup.saldo.AccountsViewBinder.java
com.adrup.saldo.AutoUpdateReceiver.java
com.adrup.saldo.AutoUpdateService.java
com.adrup.saldo.BankListActivity.java
com.adrup.saldo.BankLoginEditActivity.java
com.adrup.saldo.Constants.java
com.adrup.saldo.DatabaseAdapter.java
com.adrup.saldo.SaldoHttpClient.java
com.adrup.saldo.Saldo.java
com.adrup.saldo.SettingsActivity.java
com.adrup.saldo.Util.java
com.adrup.saldo.bank.AccountHashKey.java
com.adrup.saldo.bank.Account.java
com.adrup.saldo.bank.AuthenticationException.java
com.adrup.saldo.bank.BankException.java
com.adrup.saldo.bank.BankLogin.java
com.adrup.saldo.bank.BankManagerFactory.java
com.adrup.saldo.bank.BankManager.java
com.adrup.saldo.bank.RemoteAccount.java
com.adrup.saldo.bank.coop.CoopException.java
com.adrup.saldo.bank.coop.CoopManager.java
com.adrup.saldo.bank.firstcard.FirstcardException.java
com.adrup.saldo.bank.firstcard.FirstcardManager.java
com.adrup.saldo.bank.ica.IcaException.java
com.adrup.saldo.bank.ica.IcaManager.java
com.adrup.saldo.bank.icabanken.IcabankenException.java
com.adrup.saldo.bank.icabanken.IcabankenManager.java
com.adrup.saldo.bank.lf.LfBankException.java
com.adrup.saldo.bank.lf.LfBankManager.java
com.adrup.saldo.bank.nordea.NordeaException.java
com.adrup.saldo.bank.nordea.NordeaManager.java
com.adrup.saldo.bank.preem.PreemException.java
com.adrup.saldo.bank.preem.PreemManager.java
com.adrup.saldo.bank.statoil.StatoilException.java
com.adrup.saldo.bank.statoil.StatoilManager.java
com.adrup.saldo.bank.swedbank.SwedbankException.java
com.adrup.saldo.bank.swedbank.SwedbankManager.java
com.adrup.saldo.widget.SaldoWidgetProvider.java
com.adrup.saldo.widget.WidgetConfigurationActivity.java
com.adrup.saldo.widget.WidgetService.java
com.adrup.util.HashCodeUtil.java
com.adrup.util.NumberUtil.java
com.adrup.util.SectionedAdapter.java