У меня есть один фрагмент, который как разная ориентация меняется. Но поскольку я не хочу, чтобы моя деятельность воссоздавалась, я использовал android:configChanges="orientation|screenSize|keyboardHidden"
в операции Фрагмент, в которой хранится мой фрагмент.Ошибка памяти при изменении ориентации при использовании фрагмента
Таким образом, в фрагменте я переопределение onConfiguratinoChanged, как показано ниже:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
// need to change the according port/landscape layout file as recreation of activity is restricted.
main.removeAllViews();
main.addView(View.inflate(getActivity(), R.layout.fragment_home, null));
}
В fragment_home
корневого вида я поставил фоновое изображение, которое отличается для портретных и альбомных макетов.
Я устанавливаю свои фоновые изображения только в макете xml.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tablet_home_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_landscape" //bg_portrait changed in portrait layout
android:orientation="vertical"
android:paddingTop="10dp" >
Я сохранил свои фоновые изображения в папке drawable-hdpi
.
Это мой фрагмент:
public class HomeFragment extends SherlockFragment {
LinearLayout main;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container,false);
main = (LinearLayout) rootView.findViewById(R.id.tablet_home_main);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
main.removeAllViews();
main.addView(View.inflate(getActivity(), R.layout.fragment_home, null));
}
}
Мой вопрос, когда я постоянно менять ориентацию дома фрагмента 4-5 раз мое приложение падает и показать следующее сообщение об ошибке:
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
at android.content.res.Resources.loadDrawable(Resources.java:1965)
at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
at android.widget.ImageView.<init>(ImageView.java:120)
at android.widget.ImageView.<init>(ImageView.java:110)
ты пользуешься Растровые изображения (изображения) большого размера? –
@GopalRao Мой фоновый растровый чертеж для размещения portait составляет 51 kb, а для макета ландшафта 48 kb – Dory
Пожалуйста, покажите код, где создайте растровое изображение из потока. У вас там утечка памяти. –