Good evening,
In creating my first real personal project I have 5 fragments each containing a TabLayout with 2/3 fragments. Each has a GridView about 50 images (see 200 for some). But when I switch between Fragments I quickly reaches a OutMemory. I am in the phase of creating / testing and I use 8 Drawable present in the application (400px * 250px size, size: between 40kB and 200kB ).
The cons, the memory space used when using, the first pick is the launch dice (8 images) and each subsequent pick represents the opening of a fragment containing a TabLayout. Up to 30 sec or I return to the first fragment.
Creating TabLayout in Fragments :
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
FragmentList fla = FragmentList.newInstance("ONE", ContextCompat.getColor(getContext(), R.color.w_blue_grey_40));
adapter.addFragment(fla, "ONE");
fla = FragmentList.newInstance("TWO", ContextCompat.getColor(getContext(), R.color.w_blue_grey_40));
adapter.addFragment(fla, "TWO");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends <strong>FragmentStatePagerAdapter</strong> {
private final List<FragmentList> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(FragmentList fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
I use Picasso et Pattern Holder in my GridViewAdapter :
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
TestHolder holder = null;
if (row == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
row = mInflater.inflate(R.layout.card_test, null);
holder = new TestHolder();
holder.test_image = (ImageView) row.findViewById(R.id.test_image);
row.setTag(holder);
} else {
holder = (TestHolder) row.getTag();
}
Test test = data.get(position);
Picasso.with(context).load(test.getImage()).into(holder.test_image);
return row;
}
class TestHolder {
ImageView test_image;
}
Thx all for your answers.