[英]Android - passing string data from Fragment to Activity using TabLayout, ViewPager
[英]view visibility check in fragment inside viewpager and tablayout in Android
我有一個奇怪的問題。
實現
我在附有TabLayout
的ViewPager
有4個Fragment
。 第一個是QR碼掃描儀,它顯示一個攝像頭。 我只想在可見Fragment
時啟動相機。 為此,我重寫了Fragment
的方法setUserVisibleHint
。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
checkPermissionForCamera(); //it checks permission and start camera
} else {
stopCamera();
}
}
而且它的工作絕對正常。
期望
現在,我要實現的是,當“ Fragment
不可見(或通過滾動可見)時,它會在相機上顯示一個背景為背景的視圖,以便該封面(而不是相機)可見。 如下圖所示。
為此,我編輯了startCamera
和stopCamera
,現在如下所示,
public void startCamera() {
if(cameraCover != null)
cameraCover.setVisibility(View.GONE);
isCameraStarted = true;
mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
mScannerView.startCamera();
}
public void stopCamera() {
if(cameraCover != null)
cameraCover.setVisibility(View.VISIBLE);
if(mScannerView != null) {
isCameraStarted = false;
mScannerView.stopCamera();// Stop camera on pause
mScannerView.stopCameraPreview();// Stop camera preview
}
}
但是,只有在第一次看到灰色蓋子時,其余時間我會打開相機並在其上滾動視圖,如下所示。
我也嘗試重寫OnPageChangeListener
onPageScrolled
,但是沒有運氣。 這就是我所做的。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position == 0) {
if(positionOffset > 0.7) {
fragment = adapter.getItemAtPosition(0); //fragment is at zero
if(fragment != null) {
if(fragment instanceof ScanQRFragment) {
((ScanQRFragment) fragment).stopCamera();
}
}
}
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
請嘗試以下兩種方法之一:
1-覆蓋setMenuVisibility:
@Override
public void setMenuVisibility(final boolean visible) {
if (visible) {
//start camera preview
}
super.setMenuVisibility(visible);
}
2-檢查yourFragment.isResumed()
而不是isVisible()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.