PagerAdapter грузит все картинки сразу
Во время написания галереи для приложения, наткнулся на реализацию GridView + PageAdapter - полноразмерные фотографии нужно было перелистывать пальцем.
Всё работает, но!
Можно как-нибудь заставить работать PageAdapter так, чтобы подгружать в одно время лишь ту фотографию, которую я хочу посмотреть, а не грузить их все по очереди через universal imageloader? Ведь это трафик... грузить сразу все 100 фотографий для просмотра, скажем 49-ой и ждать пока загрузятся остальные 48....
Либо надо реализовывать подобное через другие инструменты?
Переделал под пример ниже.
Теперь стало:
1) при выборе первой картинки из галереи, она не показывается (видимо не срабатывает public void onPageSelected(int p1)
).
Увидеть её можно лишь после перелистывания на вторую, а затем снова на первую...
2) если выбрать любую картинку кроме первой, то:
Caused by: java.lang.IllegalArgumentException: view must not be null
на строчку
imageLoader.displayImage(url, imageView);
3) решено! если перевернуть экран (картинка альбомной ориентации), то черный экран без ошибок в логкэт и уже нельзя перелистывать фрагменты...
решение В манифесте, для данной активити запрещаем её пересоздание:
android:configChanges="keyboardHidden|orientation|screenSize"
КОД ПОЛНОСТЬЮ (на всякий случай, если возникнут вопросы по нему)
ImagePagerA.java
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class ImagePagerA extends FragmentStatePagerAdapter {
private List<Fragment> fragments;
public ImagePagerA(FragmentManager fm) {
super(fm);
this.fragments = new ArrayList<>();
for(int i = 0; i < Zakazchik_full.imagesArray.length; i++){
fragments.add(new ImageShowFragment());
}
}
@Override
public Fragment getItem(int i) {
return fragments.get(i);
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public int getCount() {
return fragments.size();
}
}
ImageViewPager.java
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class ImageViewPager extends FragmentActivity {
int page;
ViewPager mViewPager;
ImagePagerA mPagerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_pager);
Intent i = getIntent();
this.page = i.getExtras().getInt("id");
mPagerAdapter = new ImagePagerA(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int p1, float p2, int p3) {
// TODO: Implement this method
}
@Override
public void onPageSelected(int p1) {
page = p1;
ImageShowFragment fragment = (ImageShowFragment) mPagerAdapter.getItem(page);
fragment.showImage(Zakazchik_full.imagesArray[page]);
}
@Override
public void onPageScrollStateChanged(int p1) {
// TODO: Implement this method
}
});
mViewPager.setCurrentItem(page);
}
}
ImageShowFragment.java
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
public class ImageShowFragment extends Fragment {
private ImageView imageView;
FrameLayout fl_loading_gallery;
RelativeLayout full_screen_gallery_layout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
imageView = new ImageView(getActivity().getApplicationContext());
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
return imageView;
}
public void showImage(String url) {
fl_loading_gallery = (FrameLayout) getActivity().findViewById(R.id.fl_loading_gallery_new);
full_screen_gallery_layout = (RelativeLayout) getActivity().findViewById(R.id.full_screen_gallery_layout_new);
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(url, imageView, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
full_screen_gallery_layout.setVisibility(View.GONE);
fl_loading_gallery.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
fl_loading_gallery.setVisibility(View.GONE);
full_screen_gallery_layout.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
fl_loading_gallery.setVisibility(View.GONE);
full_screen_gallery_layout.setVisibility(View.VISIBLE);
}
});
}
}