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
}