【发布时间】:2014-05-06 21:17:54
【问题描述】:
我的结果应该类似于在每个片段中显示图像和文本。 我在视图寻呼机中使用片段
由于图像是高分辨率的,我使用异步任务下载它并保存在 sdcard 中。
如果下载了图片,我的代码工作正常,如果图片不存在,下载图片后,片段没有得到刷新,因此图像没有得到显示。图片下载完成后如何刷新片段。
我在活动中设置片段的代码是
ExtendedViewPager pager = (ExtendedViewPager) findViewById(R.id.view_pager);
/** Getting fragment manager */
FragmentManager fm = getSupportFragmentManager();
/** Instantiating FragmentPagerAdapter */
pagerAdapter = new MyGalleryPagerAdapter(fm,eventArrayList);
/** Setting the pagerAdapter to the pager object */
pager.setAdapter(pagerAdapter);
pager.setOnPageChangeListener(new MyPageChangeListener());
pager.setCurrentItem(currentpage);
我的适配器代码是
public class MyGalleryPagerAdapter extends FragmentStatePagerAdapter implements{
public static int mCurrentPage;
/** Constructor of the class
* @param eventArrayList */
ArrayList<EventsGalleryDetails> events;
public MyGalleryPagerAdapter(FragmentManager fm, ArrayList<EventsGalleryDetails> eventArrayList) {
super(fm);
events=eventArrayList;
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
System.out.println("Get Item");
MyGallery myFragment = new MyGallery();
Bundle data = new Bundle();
data.putInt("current_page", arg0);
myFragment.setArguments(data);
mCurrentPage = arg0;
return myFragment;
}
public int currentItem(){
return mCurrentPage;
}
public int getItemPosition(Object item) {
return POSITION_NONE;
}
/** Returns the number of pages */
@Override
public int getCount() {
return events.size();
}
我的片段代码是
public class MyGallery extends Fragment implements OnPageChangeListener{
ImageLoader imageLoader;
int mCurrentPage;
Bitmap bm ;
public static final String TAG = "MyGallery";
private LruCache<String, Bitmap> mMemoryCache;
private HashMap<Integer, TouchImageView>hmap = new HashMap<Integer, TouchImageView>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageLoader=new ImageLoader(getActivity());
Bundle data = getArguments();
mCurrentPage = data.getInt("current_page", 0);
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory / 8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle data = getArguments();
mCurrentPage = data.getInt("current_page", 0);
View v = inflater.inflate(R.layout.gallerysecondscreenitem, container,false);
TouchImageView img = (TouchImageView)v.findViewById(R.id.galleryimage);
TextView txt = (TextView ) v.findViewById(R.id.gallerytext);
hmap.put(mCurrentPage, img);
if(new File(Constants.Path+".jpg").exists()){
loadBitmap(img);
bm = null;
img = null;
}else{
img.setImageResource(R.drawable.gallery_icon);
}
txt.setText(GallerySecondScreen.eventArrayList.get(mCurrentPage).getTitle());
return v;
}
public void loadBitmap(TouchImageView mImageView) {
final String imageKey = String.valueOf(mCurrentPage);
final Bitmap bitmap = mMemoryCache.get(imageKey);
if (bitmap != null) {
mImageView.setImageBitmap(bitmap);
} else {
mImageView.setImageResource(R.drawable.gallery_icon);
BitmapWorkerTask task = new BitmapWorkerTask();
task.execute(mImageView);
}
}
我下载图片的异步任务是
private class DownloadImageTask extends AsyncTask<Integer, Integer, Integer>{
@Override
protected Integer doInBackground(Integer... values) {
try {
for(int j=0;j<eventArrayList.size();j++){
if(!new File(Constants.Path+".jpg").exists()){
downloadImageFromServer(eventArrayList.get(j).getImage(), ""+pos,""+j);
publishProgress(j);
//Log.d("Image will be downloaded from server now..", "the "+values[0]);
}else{
publishProgress(j);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("value of j:",""+j);
return j;
}}
请在完成我的图片下载后提出一种刷新视图的方法
【问题讨论】:
标签: android android-fragments android-asynctask android-viewpager