com.github.riotopsys.shoppinglist.adapter.ShoppingListCollectionAdapter.java Source code

Java tutorial

Introduction

Here is the source code for com.github.riotopsys.shoppinglist.adapter.ShoppingListCollectionAdapter.java

Source

/**
 * Copyright 2012 C. A. Fitzgerald
 *
 *  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.github.riotopsys.shoppinglist.adapter;

import java.util.Collections;
import java.util.List;

import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.util.Log;

import com.github.riotopsys.shoppinglist.AppKeys;
import com.github.riotopsys.shoppinglist.comparator.ListNameComparator;
import com.github.riotopsys.shoppinglist.fragment.ShoppingListFragment;
import com.github.riotopsys.shoppinglist.model.ShoppingList;
import com.github.riotopsys.shoppinglist.model.ShoppingListCollection;

public class ShoppingListCollectionAdapter extends FragmentStatePagerAdapter {

    private static final String TAG = FragmentStatePagerAdapter.class.getSimpleName();

    private ShoppingListCollection mShoppingListCollection;
    private List<ShoppingList> mItems;

    private ListNameComparator mComparator = new ListNameComparator();

    public ShoppingListCollectionAdapter(Context ctx, FragmentManager fm, ShoppingListCollection collection) {
        super(fm);
        mShoppingListCollection = collection;
        mItems = mShoppingListCollection.getItems(ctx);
        Collections.sort(mItems, mComparator);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = new ShoppingListFragment();
        Bundle args = new Bundle();
        args.putSerializable(AppKeys.LIST_KEY, mItems.get(position).getGuid());
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title = "";
        if (mItems.size() > 0 && mItems.size() > position) {
            title = mItems.get(position).getName();
        }
        return title;
    }

    @Override
    public int getCount() {
        return mItems.size();
    }

    @Override
    public void notifyDataSetChanged() {
        throw new RuntimeException(TAG + " needs a context!");
    }

    public void notifyDataSetChanged(Context ctx) {
        mItems = mShoppingListCollection.getItems(ctx);
        Collections.sort(mItems, mComparator);
        super.notifyDataSetChanged();
    }

    public ShoppingList getList(int currentItem) {
        return mItems.get(currentItem);
    }

    @Override
    public int getItemPosition(Object object) {
        // TODO: something is very wrong here

        // ShoppingListFragment fragment = (ShoppingListFragment) object;
        // FragmentActivity activity = fragment.getActivity();
        // if (activity == null) {
        // return POSITION_NONE;
        // }
        // UUID uuid = (UUID)
        // fragment.getArguments().getSerializable(IntentKeys.LIST_KEY);
        // int index = mItems.indexOf(DataManager.getRecord(activity, uuid));
        // if (index != -1) {
        // return index;
        // }
        return POSITION_NONE;
    }

    @Override
    public Parcelable saveState() {
        try {
            return super.saveState();
        } catch (IllegalStateException e) {
            Log.e(TAG, "suppressing", e);
        }
        return null;
    }

    public int getPositionOf(ShoppingList shoppingList) {
        return mItems.indexOf(shoppingList);
    }

}