I wanted to use ViewPager
to display some encrypted images. For that I created an extension of PagerAdapter
and put my decryption code inside instantiateItem
method. But the problem is that the process of decryption takes too long. So, I used AsyncTask
inside instantiateItem
method to show a progress dialog.
Now, ViewPager
displays a blank screen at first and I should swipe to view the first image. Moreover setCurrentItem()
does not work.
My Code:
public class FullScreenImageAdapter extends PagerAdapter { private Activity _activity; private ArrayList<String> _imagePaths; private LayoutInflater inflater; ImageView imgDisplay; // constructor public FullScreenImageAdapter(Activity activity, ArrayList<String> imagePaths) { this._activity = activity; this._imagePaths = imagePaths; } @Override public int getCount() { return this._imagePaths.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == ((RelativeLayout) object); } @Override public Object instantiateItem(ViewGroup container, int position) { inflater = (LayoutInflater) _activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container, false); imgDisplay = (ImageView) viewLayout.findViewById(R.id.img_axew); new DisplayFile().execute(_imagePaths.get(position)); ((ViewPager) container).addView(viewLayout); return viewLayout; } private class DisplayFile extends AsyncTask<String, Integer, Integer> { ProgressDialog progress; String path; Bitmap bitmap; @Override protected Integer doInBackground(String... arg0) { path = arg0[0]; File file = new File(path); try { bitmap = AxerProcessor.getBitmapFromByte(AxerProcessor.decryptBytes(AxewActivity.password, AxerProcessor.decompressBytes(AxerProcessor.getFileBytes(file)))); } catch (Exception e) { Toast.makeText(_activity, _activity.getString(R.string.error_wrong_password).replace("%s", file.getName()), Toast.LENGTH_LONG).show(); } return null; } @Override protected void onPreExecute() { progress = ProgressDialog.show(_activity, _activity.getString(R.string.alert_decrypt_progress), _activity.getString(R.string.alert_decrypt_progress_msg), false); } @Override protected void onPostExecute(Integer result) { progress.dismiss(); imgDisplay.setImageBitmap(bitmap); } } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((RelativeLayout) object); } }