我使用的是scandit库。这是活动。在这个活动上我叫片段。当我打电话给片段时,我停止了相机。这行得通。但我有一些问题。如果我调用片段,相机就会停止。好。然后,如果我的手机进入睡眠模式,请调用onPause()方法。然后,如果我转动电话,请调用onStart()方法。在onStart()我打电话开始相机。我想如果活动有片段并且调用onStart()相机无法启动。
public class ScanActivity extends ActionBarActivity implements ScanditSDKListener {
.....
@Override
protected void onPause() {
// When the activity is in the background immediately stop the
// scanning to save resources and free the camera.
stopScan();
super.onPause();
}
@Override
protected void onResume() {
// Once the activity is in the foreground again, restart scanning.
**Then I want to check if the fragment is open, do not include**
startScan();
super.onResume();
}
答案 0 :(得分:0)
您可以查看片段管理器。当你启动片段时给它一个标签并从它的标签中获取片段实例。
另一种粗略的方法是设置一个静态布尔标志,并使其在恢复时为真,在停止时为假。我会选择getfragmentbyTag(" fragment-one")方法。
修改强>
实际上只使用第一种方法。忽略第二个。不仅静态变量很糟糕,而且如果活动长时间不在焦点或进入后台堆叠,GC将决定清理静态变量。总而言之,这是一个糟糕的建议,我把它拿回来。
修改强>
以下是代码:
启动片段时,请为其指定标签:
FragmentTransaction transaction;
transaction = ((HomeActivity) getActivity()).getFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, fragment,"MyFrag");
transaction.addToBackStack("a");
transaction.commit();
getActivity().getFragmentManager().executePendingTransactions();
查找片段:
FragmentManager fragmentManager = getActivity().getFragmentManager();
android.app.Fragment tempFragment=fragmentManager.findFragmentByTag("MyFrag");
本质上,您替换了一个新片段,为其分配了一个标签,并使用该标签获取相同片段的当前对象:
@Override
protected void onResume() {
// Once the activity is in the foreground again, restart scanning.
**Then I want to check if the fragment is open, do not include**
if(tempFragment!=null)
{
//Fragment is open so do not include your code
}
else
{
Fragment is null
startScan();
}
super.onResume();
}