Android Open Source - Book-MetaSearch Detail Fragment






From Project

Back to project page Book-MetaSearch.

License

The source code is released under:

Apache License

If you think the Android project Book-MetaSearch 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

package net.grosinger.bookmetasearch.fragment;
//from   w  ww  .j  a va  2 s  .c o m
import android.app.Fragment;
import android.app.LoaderManager;
import android.content.Loader;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;

import net.grosinger.bookmetasearch.BookInventoryAdapter;
import net.grosinger.bookmetasearch.R;
import net.grosinger.bookmetasearch.inventory.AvailableBook;
import net.grosinger.bookmetasearch.book.Book;
import net.grosinger.bookmetasearch.inventory.InventoryListItem;
import net.grosinger.bookmetasearch.loader.AmazonQuery;
import net.grosinger.bookmetasearch.loader.InventoryLoader;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Show the cover image, book name, author, rating and description of
 * book above a list of all sources where the book can be found.
 *
 * Provides handling of inventory loading and interacts with a
 * custom ListView adapter to create custom headings
 *
 * @author Tony
 * @since 11/3/2013
 */
public class DetailFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<AvailableBook>> {
    Book book;
    InventoryLoader queryLoader;

    BookInventoryAdapter bookSourcesAdapter;
    AvailableBook[] currentSearchResults;

    /**
     * Default constructor for use during orientation changes
     */
    public DetailFragment() {
    }

    public DetailFragment(Book book) {
        this.book = book;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.d(getClass().getSimpleName(), "Creating View");

        getLoaderManager().initLoader(0, null, this);

        if(savedInstanceState != null) {
            if (savedInstanceState.containsKey("book")) {
                book = savedInstanceState.getParcelable("book");
            }
            if (savedInstanceState.containsKey("results")) {
                currentSearchResults = (AvailableBook[]) savedInstanceState.getParcelableArray("results");
            }
        }

        return inflater.inflate(R.layout.fragment_detail, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        Log.d(getClass().getSimpleName(), "Creating activity");

        // Get all the fields at the top of the screen
        ImageView coverImg = (ImageView) getActivity().findViewById(R.id.imageView_coverImg);
        TextView title = (TextView) getActivity().findViewById(R.id.textView_detailBookName);
        TextView author = (TextView) getActivity().findViewById(R.id.textView_detailAuthorName);
        TextView description = (TextView) getActivity().findViewById(R.id.textView_detailDescription);
        RatingBar rating = (RatingBar) getActivity().findViewById(R.id.ratingBar_detailBookRating);

        // Populate fields at top of screen with book information
        book.getImageAsync(coverImg);
        title.setText(book.getTitle());
        author.setText(book.getAuthor().getName());
        description.setText(book.getDescription());
        rating.setRating((float) book.getAvg_rating());

        // TODO: Async-loadProducts book description

        // Create the custom ListView adapter and set it on the list
        bookSourcesAdapter = new BookInventoryAdapter(getActivity(), null, null);
        ListView bookSourcesListView = (ListView) getActivity().findViewById(R.id.listView_detailBookSources);
        bookSourcesListView.setAdapter(bookSourcesAdapter);

        // Initiate a load if we do not have saved data
        if(currentSearchResults != null) {
            onLoadFinished(null, Arrays.asList(currentSearchResults));
        } else {
            if(queryLoader == null) {
                onCreateLoader(0, null);
            }
            queryLoader.setSearchTarget(book);
            queryLoader.forceLoad();
        }
    }

    @Override
    public void onSaveInstanceState (Bundle outState) {
        Log.d(getClass().getSimpleName(), "Saving instance state");

        outState.putParcelable("book", book);
        outState.putParcelableArray("results", currentSearchResults);
    }

    @Override
    public Loader<List<AvailableBook>> onCreateLoader(int i, Bundle args) {
        Log.v(getClass().getSimpleName(), "Creating Loader");

        queryLoader = new InventoryLoader(getActivity());
        queryLoader.addInventoryQuery(new AmazonQuery());
        return queryLoader;
    }

    @Override
    public void onLoadFinished(Loader<List<AvailableBook>> loader, List<AvailableBook> results) {
        Log.d(getClass().getSimpleName(), "Finished loading, setting results");

        // We need to save these results so we can parcel them if the orientation is changed
        currentSearchResults = results.toArray(new AvailableBook[results.size()]);

        Log.d(getClass().getSimpleName(), "Sorting results by type");
        List<InventoryListItem> ebooks = new ArrayList<InventoryListItem>();
        List<InventoryListItem> audiobooks = new ArrayList<InventoryListItem>();
        for (AvailableBook book : results) {
            if (book.getFormat().equals(AvailableBook.Format.EBOOK)) {
                ebooks.add(book);
            } else {
                audiobooks.add(book);
            }
        }

        Log.d(getClass().getSimpleName(), "Updating list adapters");
        bookSourcesAdapter.clear();
        bookSourcesAdapter.addAll(ebooks, audiobooks);
        bookSourcesAdapter.notifyDataSetChanged();
    }

    @Override
    public void onLoaderReset(Loader<List<AvailableBook>> loader) {
        Log.d(getClass().getSimpleName(), "Resetting loader");

        queryLoader.setSearchTarget(null);
        currentSearchResults = null;
    }
}




Java Source Code List

com.ECS.client.jax.Accessories.java
com.ECS.client.jax.Arguments.java
com.ECS.client.jax.BrowseNode.java
com.ECS.client.jax.BrowseNodes.java
com.ECS.client.jax.Collections.java
com.ECS.client.jax.CustomerReviews.java
com.ECS.client.jax.DecimalWithUnits.java
com.ECS.client.jax.EditorialReview.java
com.ECS.client.jax.EditorialReviews.java
com.ECS.client.jax.Errors.java
com.ECS.client.jax.ImageSet.java
com.ECS.client.jax.Image.java
com.ECS.client.jax.ItemAttributes.java
com.ECS.client.jax.ItemLink.java
com.ECS.client.jax.ItemLinks.java
com.ECS.client.jax.Item.java
com.ECS.client.jax.LoyaltyPoints.java
com.ECS.client.jax.Merchant.java
com.ECS.client.jax.NewReleases.java
com.ECS.client.jax.NonNegativeIntegerWithUnits.java
com.ECS.client.jax.OfferAttributes.java
com.ECS.client.jax.OfferListing.java
com.ECS.client.jax.OfferSummary.java
com.ECS.client.jax.Offer.java
com.ECS.client.jax.Offers.java
com.ECS.client.jax.Price.java
com.ECS.client.jax.Promotion.java
com.ECS.client.jax.Promotions.java
com.ECS.client.jax.Property.java
com.ECS.client.jax.RelatedItem.java
com.ECS.client.jax.RelatedItems.java
com.ECS.client.jax.SimilarProducts.java
com.ECS.client.jax.TopItemSet.java
com.ECS.client.jax.TopSellers.java
com.ECS.client.jax.Tracks.java
com.ECS.client.jax.VariationAttribute.java
com.ECS.client.jax.VariationDimensions.java
com.ECS.client.jax.VariationSummary.java
com.ECS.client.jax.Variations.java
net.grosinger.bookmetasearch.BookDetail.java
net.grosinger.bookmetasearch.BookInventoryAdapter.java
net.grosinger.bookmetasearch.Home.java
net.grosinger.bookmetasearch.SearchActivity.java
net.grosinger.bookmetasearch.book.Author.java
net.grosinger.bookmetasearch.book.Book.java
net.grosinger.bookmetasearch.book.provider.BookProvider.java
net.grosinger.bookmetasearch.book.provider.LibraryBookProvider.java
net.grosinger.bookmetasearch.book.provider.RetailBookProvider.java
net.grosinger.bookmetasearch.fragment.DetailFragment.java
net.grosinger.bookmetasearch.fragment.HomeFragment.java
net.grosinger.bookmetasearch.fragment.SearchResultsFragment.java
net.grosinger.bookmetasearch.inventory.AvailableBook.java
net.grosinger.bookmetasearch.inventory.InventoryHeader.java
net.grosinger.bookmetasearch.inventory.InventoryListItem.java
net.grosinger.bookmetasearch.loader.AmazonQuery.java
net.grosinger.bookmetasearch.loader.AsyncImageLoader.java
net.grosinger.bookmetasearch.loader.GoodreadsQuery.java
net.grosinger.bookmetasearch.loader.GoogleQuery.java
net.grosinger.bookmetasearch.loader.InventoryLoader.java
net.grosinger.bookmetasearch.loader.InventoryQuery.java
net.grosinger.bookmetasearch.loader.ProductLoader.java
net.grosinger.bookmetasearch.loader.ProductQuery.java
net.grosinger.bookmetasearch.search.RecentBookSearchSuggestionsProvider.java
net.grosinger.bookmetasearch.search.SearchResultAdapter.java