如何确定Activity上打开的片段?

时间:2015-03-23 03:55:05

标签: android android-activity

我使用的是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();
    }

1 个答案:

答案 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();
}