我正試圖實現一個畫廊。使用片段作爲照片庫的Android,如何?
由於圖庫小部件已被棄用...實現它,並有分頁滾動效果,我使用片段(android兼容性v4)來做到這一點。
一切都看起來不錯,直到滾動回來......我的APP只是強制關閉的原因是:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
看起來它重新獲得一個ImageView的時候向後滾動顯示上一張照片。
而且我不知道如何解決這個問題?
這裏是我的xml &代碼
[XML]
<android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_below="@id/head" android:layout_width="wrap_content" android:layout_height="350dp" android:layout_marginTop="35dp" />
[代碼]
public class PhotoView extends FragmentActivity
{
private Button btnBack=null;
private ClickHandler click=null;
private ViewPager pager=null;
private ArrayList<ImageView> imgList=new ArrayList<ImageView>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.photo_show);
initUI();
handler.sendEmptyMessage(0);
}
private void initUI()
{
btnBack=(Button)findViewById(R.id.btnBack);
btnBack.setOnClickListener(click);
pager=(ViewPager)findViewById(R.id.pager);
}
private Handler handler=new Handler()
{
public void handleMessage(Message msg)
{
loadPhotos();
}
};
private void loadPhotos()
{
for(int i=0; i<Constants.PHOTO_LIST.size(); i++)
{
ImageView img=new ImageView(this);
img.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
imgList.add(img);
new ImageDL(Constants.PHOTO_LIST.get(i).getFileId(), Params.IMAGE_SIZE_PARAM_ORIGINAL).execute(img); // async D/L photo
}
pager.setAdapter(new PhotoAdapter(getSupportFragmentManager()));
}
@Override
public void onBackPressed()
{
super.onBackPressed();
btnBack.performClick();
return;
}
@Override
protected void onStop()
{
super.onStop();
for(int i=0; i<imgList.size(); i++) //Do recycle when activity stopped, but I'm not yet sure this code is right...
{
Drawable drawable=imgList.get(i).getDrawable();
if(drawable instanceof BitmapDrawable)
{
BitmapDrawable bitmapDrawable=(BitmapDrawable) drawable;
Bitmap bitmap=bitmapDrawable.getBitmap();
bitmap.recycle();
}
}
imgList.clear();
imgList=null;
}
private class ClickHandler implements OnClickListener
{
public void onClick(View v)
{
if(v==btnBack)
{
finish();
overridePendingTransition(R.anim.lr1, R.anim.lr2);
System.gc();
}
}
}
private class PhotoAdapter extends FragmentPagerAdapter
{
public PhotoAdapter(FragmentManager mgr)
{super(mgr);}
@Override
public int getCount()
{
return(imgList.size());
}
@Override
public Fragment getItem(int position)
{
return(new PhotoFragment(position));
}
}
private class PhotoFragment extends Fragment
{
private int index=-1;
private PhotoFragment(int index)
{this.index=index;}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return imgList.get(index);
}
}
}
這是我第一次在我的代碼中使用Fragment API,我不確定我所做的代碼邏輯是正確的。
有什麼想法可以幫助我解決這個問題,或者在Android 2.3〜4.x中實現gallery(帶分頁滾動)的另一種更好的方法嗎?
謝謝,我終於用HorizontalPager來實現我的畫廊... – RRTW