ViewPager с фрагментом, который показывает ParseImage

Вопрос:

У меня проблема с ViewPager. Мой ViewPager должен показывать изображения с Parse.com. Каждый элемент ViewPager представляет собой фрагмент, тот же фрагмент и показывает разные изображения в зависимости от элемента. Моя проблема, например: если у меня три страницы, первая страница ничего не показывает, вторая показывает правильное изображение, а третье – правильное. Когда я вернусь на первую страницу, изображение загрузится, но только когда я вернусь к нему, а не в первый раз. Это мой код:

Моя активность:

public class FolletosActivity extends FragmentActivity {

public static final String QUERY = "query";

String selec;
ViewPager viewPager;
private PagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_carta_menu);

Intent intent = getIntent();
selec = intent.getStringExtra(QUERY);

viewPager = (ViewPager) findViewById(R.id.pager);

mPagerAdapter = new FolletosPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mPagerAdapter);

}

PagerAdapter:

public class FolletosPagerAdapter extends FragmentPagerAdapter {

int numPages;

public FolletosPagerAdapter(FragmentManager fm) {
super(fm);

ParseQuery<ParseObject> query = ParseQuery.getQuery("folletos_app");
query.whereGreaterThanOrEqualTo("num_pag", 0); //busco todos los objetos de parse
List<ParseObject> promosParse = null;
try {
promosParse = query.find();
numPages = promosParse.size();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public Fragment getItem(int position) {
return new PaginaFolletoFragment(position);

}

@Override
public int getCount() {
return numPages;
}

}

И Фрагмент:

public class PaginaFolletoFragment extends Fragment {
public static final String QUERY = "query";
ParseImageView imageView;
String selec;
int position_;

public PaginaFolletoFragment(int position) {
// TODO Auto-generated constructor stub
position_ = position;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);

String filepath = "/sdcard/Android/data/package/cache/uil-images/"+"folleto_"+selec+"_"+"numpage_"+position_;
File file = new File(filepath);
if(file.exists()){
Bitmap bmp = BitmapFactory.decodeFile(filepath);
imageView.setImageBitmap(bmp);
}
else{

if(ImageLoader.getInstance().isInited())
ImageLoader.getInstance().destroy();

//Create image options.
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.build();

//Create a config with those options.
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getActivity().getApplicationContext())
.defaultDisplayImageOptions(options)
.discCacheFileNameGenerator(new FileNameGenerator() {

@Override
public String generate(String imageUri) {

return "folleto_"+selec+"_"+"numpage_"+position_;

}

})

.memoryCacheSize(41943040)
.discCacheSize(104857600)
.threadPoolSize(10)
.build();

ImageLoader.getInstance().init(config);


ParseQuery<ParseObject> query = ParseQuery.getQuery("folletos_app");

query.whereEqualTo("num_pag", position_);


List<ParseObject> promosParse;
try {
promosParse = query.find();

for(final ParseObject dealsObject : promosParse) {

final ParseFile image = dealsObject.getParseFile("pagina");
imageView.loadInBackground(new GetDataCallback() {
public void done(byte[] data, ParseException e) {
// The image is loaded and displayed!
int oldHeight = imageView.getHeight();
int oldWidth = imageView.getWidth();

ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(image.getUrl(), imageView);


}
});

}

} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} //los meto en una lista

}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_pagina_menu, container, false);
imageView = (ParseImageView) view.findViewById(R.id.imagePage);

Intent intent = getActivity().getIntent();
selec = intent.getStringExtra(QUERY);

return view;
}

}

Ответ №1

Извините, если это поздно, но это то, что вы хотите сделать.

//Get the image from your ParseObject

ParseFile file = (ParseFile) dealsObject.getParseFile("pagina");

//Set the imageview to show the content of your ParseFile

imageView.setParseFile(file);

//Load the image in the background and display ones loaded

imageView.loadInBackground(new GetDataCallback() {
@Override
public void done(byte[] bytes, ParseException e) {
if (e != null) {

}
}
}

Оцените статью
TechArks.Ru
Добавить комментарий