DisplayingBitmaps / src / com.example.android.displayingbitmaps / ui /

ImageDetailFragment.java

1
/*
2
 * Copyright (C) 2012 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.displayingbitmaps.ui;
18
 
19
import android.os.Bundle;
20
import android.support.v4.app.Fragment;
21
import android.view.LayoutInflater;
22
import android.view.View;
23
import android.view.View.OnClickListener;
24
import android.view.ViewGroup;
25
import android.widget.ImageView;
26
 
27
import com.example.android.displayingbitmaps.R;
28
import com.example.android.displayingbitmaps.util.ImageFetcher;
29
import com.example.android.displayingbitmaps.util.ImageWorker;
30
import com.example.android.displayingbitmaps.util.Utils;
31
 
32
/**
33
 * This fragment will populate the children of the ViewPager from {@link ImageDetailActivity}.
34
 */
35
public class ImageDetailFragment extends Fragment {
36
    private static final String IMAGE_DATA_EXTRA = "extra_image_data";
37
    private String mImageUrl;
38
    private ImageView mImageView;
39
    private ImageFetcher mImageFetcher;
40
 
41
    /**
42
     * Factory method to generate a new instance of the fragment given an image number.
43
     *
44
     * @param imageUrl The image url to load
45
     * @return A new instance of ImageDetailFragment with imageNum extras
46
     */
47
    public static ImageDetailFragment newInstance(String imageUrl) {
48
        final ImageDetailFragment f = new ImageDetailFragment();
49
 
50
        final Bundle args = new Bundle();
51
        args.putString(IMAGE_DATA_EXTRA, imageUrl);
52
        f.setArguments(args);
53
 
54
        return f;
55
    }
56
 
57
    /**
58
     * Empty constructor as per the Fragment documentation
59
     */
60
    public ImageDetailFragment() {}
61
 
62
    /**
63
     * Populate image using a url from extras, use the convenience factory method
64
     * {@link ImageDetailFragment#newInstance(String)} to create this fragment.
65
     */
66
    @Override
67
    public void onCreate(Bundle savedInstanceState) {
68
        super.onCreate(savedInstanceState);
69
        mImageUrl = getArguments() != null ? getArguments().getString(IMAGE_DATA_EXTRA) : null;
70
    }
71
 
72
    @Override
73
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
74
            Bundle savedInstanceState) {
75
        // Inflate and locate the main ImageView
76
        final View v = inflater.inflate(R.layout.image_detail_fragment, container, false);
77
        mImageView = (ImageView) v.findViewById(R.id.imageView);
78
        return v;
79
    }
80
 
81
    @Override
82
    public void onActivityCreated(Bundle savedInstanceState) {
83
        super.onActivityCreated(savedInstanceState);
84
 
85
        // Use the parent activity to load the image asynchronously into the ImageView (so a single
86
        // cache can be used over all pages in the ViewPager
87
        if (ImageDetailActivity.class.isInstance(getActivity())) {
88
            mImageFetcher = ((ImageDetailActivity) getActivity()).getImageFetcher();
89
            mImageFetcher.loadImage(mImageUrl, mImageView);
90
        }
91
 
92
        // Pass clicks on the ImageView to the parent activity to handle
93
        if (OnClickListener.class.isInstance(getActivity()) && Utils.hasHoneycomb()) {
94
            mImageView.setOnClickListener((OnClickListener) getActivity());
95
        }
96
    }
97
 
98
    @Override
99
    public void onDestroy() {
100
        super.onDestroy();
101
        if (mImageView != null) {
102
            // Cancel any pending image work
103
            ImageWorker.cancelWork(mImageView);
104
            mImageView.setImageDrawable(null);
105
        }
106
    }
107
}