1

我遵循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

回答

0

我發現發現如下信息的一個部分的解決方案,whiiii!

我實現了鏈接中提到的Disable ViewPager。 然後在onClick方法中添加以下內容。

public void onClick(View v) { 

    TouchImageViewLocal ti = (TouchImageViewLocal) findViewById(R.id.imageView); 
    if(ti.isZoomed()){ 
     Log.d(TAG, "-----------------------------------------is zoomed in? " + ti.isZoomed()); 
     mPager.setPagingEnabled(false); 
    }else 
    { 
     Log.d(TAG, "-----------------------------------------is zoomed in? " + ti.isZoomed()); 
     mPager.setPagingEnabled(true); 
    } 

這允許屏幕,如果它放大停止/開始滑動,但是,我仍然必須找到在邊緣檢測。 :-)

相關問題