我遵循Android開發人員文檔中的BitMapFun教程。由於我總體上是Android/Java編程的新手段。如何從FragmentActivity中的片段訪問數據,以防止刷卡使用
我創建了一個自定義的圖像瀏覽器(稱爲TouchImageView),它允許用戶放大,doubletap等..並將其應用在ImageDetailFragment類。
在TouchImageView類我有一個布爾變量,如果用戶在或不放大,可以檢測,並在情況下,它zoomedIn它還將標誌,如果圖像是在邊境一側。 (因此放大比特和屏幕的邊界很重要)
我想應用這個邏輯來啓用或禁用ViewPager以允許用戶滾動到下一個/上一個頁面(閱讀片段)這個ViewPager位於ImageDetailActivity實現了FragmentActivity
至於我的代碼現在,如果我向左或向右移動(在放大狀態),而不是移動圖像,就會進入下一個片段,而不是滾動左或對。除非我先上下移動,然後才能滾動圖像。
所以我想,如果我在片段中有一個布爾值,我可以檢查以便Activiy啓用/禁用ViewPager,那麼我可以'控制'滾動的方式。
這個邏輯是否正確?如果是這樣,我怎麼能從我的DetailActivity類中的片段檢索布爾值。我嘗試過使用接口,但是我總是收到一個錯誤的回覆(由於onCreate中的片段初始化?)所以我需要一些可以在運行時在顯示的片段上檢索布爾值的東西。然而從我的代碼下面,它從來沒有工作。
public void onCreate(Bundle savedInstanceState) {
.... Do stuff like fetching images and caching etc ....
mPager = (ScrollViewPager) findViewById(R.id.pager);
mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), imgs.getImagesLocal().length);
mPager.setAdapter(mAdapter);
mPager.setPageMargin((int) getResources().getDimension(R.dimen.image_detail_pager_margin));
mPager.setOffscreenPageLimit(2);
mPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//v.mAdapter.mCurItem
ScrollViewPager scroll = (ScrollViewPager) v;
//Log.d(TAG, "-----------------Current pos is "+ scroll.getCurrentItem());
ImageDetailFragment frag = (ImageDetailFragment) mAdapter.getItem(scroll.getCurrentItem());
if(frag.isPageChangeable())
{
Log.d(TAG, "-----------------Page is zoomed");
}else
{
Log.d(TAG, "----------------------Page is not Zoomed");
}
return false;
}
});
}
我得到的片段初始化是。
/**
* The main adapter that backs the ViewPager. A subclass of FragmentStatePagerAdapter as there could be a large number of items in the ViewPager and we don't want to retain
* them all in memory at once but create/destroy them on the fly.
*/
private class ImagePagerAdapter extends FragmentStatePagerAdapter {
private final int mSize;
public ImagePagerAdapter(FragmentManager fm, int size) {
super(fm);
mSize = size;
}
@Override
public int getCount() {
return mSize;
}
@Override
public Fragment getItem(int position) {
return ImageDetailFragment.newInstance(imgs.getImagesLocal()[position], position, imgs.getImagesLocal().length);
}
}
如果你想看看完整的代碼,你可以download it here.
爲預防輕掃/一扔我想用這個stackoverflow post