Я абсолютно новый в Android, и я нахожу некоторые проблемы, чтобы сделать следующее, связанное с Контекстом.Как правильно получить Контекст в класс, который расширяет фрагмент?
Так у меня есть класс, который содержит метод полезности, создавать и возвращать Bitmap изображения, это код моего класса:
public class ImgUtility {
/**
* Method that create the images related to the difficulty of a recepy
* @param context
* @param difficulty that represent the number of chef_hat_ok into the final image
* @return a Bitmap representing the difficult of a recepy
*/
public static Bitmap createRankingImg(Context context, int difficulty) {
// Create a Bitmap image starting from the star.png into the "/res/drawable/" directory:
Bitmap myBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.chef_hat_ok);
// Create a new image bitmap having width to hold 5 star.png image:
Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth() * 5, myBitmap.getHeight(), Bitmap.Config.RGB_565);
/* Attach a brand new canvas to this new Bitmap.
The Canvas class holds the "draw" calls. To draw something, you need 4 basic components:
1) a Bitmap to hold the pixels.
2) a Canvas to host the draw calls (writing into the bitmap).
3) a drawing primitive (e.g. Rect, Path, text, Bitmap).
4) a paint (to describe the colors and styles for the drawing).
*/
Canvas tempCanvas = new Canvas(tempBitmap);
// Draw the image bitmap into the cavas:
tempCanvas.drawBitmap(myBitmap, 0, 0, null);
tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth(), 0, null);
tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth() * 2, 0, null);
tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth() * 3, 0, null);
tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth() * 4, 0, null);
return tempBitmap;
}
}
Как вы можете видеть, этот класс содержит createRankingImg, которые принимают параметр Контекст как параметр и используют его для создания изображения. Этот объект используется для извлечения изображения из ресурсов (в метод BitmapFactory.decodeResource()). Что именно представляет объект Context в приложение для Android?
Я знаю, что, чтобы получить контекст в классе деятельности я могу использовать GetResources() метод.
Моя проблема заключается в том, что я должен получить контекст в класс, который exetends Фрагмент.
У меня есть что-то вроде этого:
public class ScreenSlidePageFragment extends Fragment {
.......................................................................
.......................................................................
.......................................................................
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
.....................................................................
.....................................................................
.....................................................................
switch (mPageNumber + 1) {
case 1:
imgSlideView.setImageResource(R.drawable.carbonara);
((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.carbonara));
ImageView difficultyContainerImageView1 = (ImageView) rootView.findViewById(R.id.difficultyContainer);
difficultyContainerImageView1.setImageDrawable(new BitmapDrawable(getResources(), ImgUtility.createRankingImg(getApplicationContext(), 3)));
break;
.....................................................................
.....................................................................
.....................................................................
}
return rootView;
}
Моя проблема заключается в том, что, когда в предыдущем классе фрагмента я вызываю метод
ImgUtility.createRankingImg(getResources(), 3)
передавая ему GetResources() выход (т.е. Я подумал, дайте мне Контекст, IDE сообщит мне следующее сообщение об ошибке:
Неверный тип 1-го аргумента. Найдено: «android.content.res.Resources», требуется: «android.content.Context»
Так что, мне кажется, что в класс, который расширяет фрагмент и не активностьgetResources() метод return a Ресурсы объект вместо a Контекст объект (как сделано в класс Activity). Это правда? Зачем?
Как я могу получить контекст внутри класса, который расширяет Fragment? И что именно представляет собой Контекст в приложении для Android?
Используйте getContext() вместо getResources(). Обратите внимание, getContext() может быть нулевым. –
Если вы посмотрите на Android JavaDoc для объекта Context, он точно объяснит, что это такое. Вы также заметите, что классы активности расширяют контекст –
При использовании 'getActivity' в коде фрагмента убедитесь, что вы правильно обрабатываете все события attach/detach, поэтому вы используете правильную активность (и не храните ее где-нибудь (плохая практика) , или сбой на «null», когда фрагмент отсоединен. Для доступа к ресурсам довольно часто достаточно контекста приложения, что является более разумным для хранения локально внутри фрагмента, что дает вам доступ к ним, даже если он отключен от активности (но все же лучший практика заключается в том, чтобы не полагаться на какой-либо сохраненный контекст, а работать с текущим, правильно управляя отдельным режимом). – Ped7g