我的结果应该像在每个片段中显示图像和文字一样。 我在视图寻呼机中使用片段
由于图像是高分辨率,我使用异步任务下载并保存在SD卡中。
如果下载图像,我的代码工作正常,如果图像不存在,则在下载图像后,片段不会刷新,因此图像不会显示。如何在完成图像下载后刷新片段。
我在设置片段的活动中的代码是
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);
}
}
用于下载图像的asyc任务是
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;
}}
请在完成我的图片下载后建议一种刷新视图的方法
答案 0 :(得分:0)
如果他们不适合您,请尝试this.getView().draw()
或requestLayout()
答案 1 :(得分:0)
这里的问题是寻呼机适配器没有刷新。传递给BitmapWorkerTask的ImageView将在下载图像后得到更新,但您必须找到一种方法来使用PagerAdapter中的notifyDataSetChanged更新pagerAdapter。首先,您需要从BitmapWorkerTask创建Callback,以便在下载完成后通知片段。然后你必须向你的PagerAdapter提供一个监听器,它应该在触发后调用notifyDataSetChanged方法。
答案 2 :(得分:0)
我通过使用相同的pagesradpter.notifydatasetchanged()解决了这个问题。而不是每次都调用它,我只在下载当前视图的图像时调用
这是我修改过的OnprogressUpdate
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
System.out.println("Downloaded "+values[0]);
if(values[0] == mPager.mCurrentPage){
pagerAdapter.notifyDataSetChanged();
}
}