我想在 fragment 上有一个传感器管理器,它仅在 fragment 处于 Activity 状态时才处于 Activity 状态。如果用户更改 fragment ,则应删除监听器。
添加和删除监听器非常简单。当 fragment 出现/消失时,我不知道 fragment 端有任何监听器/函数。还有一个问题是,在几乎所有函数上,this.getActivity()
返回一个空指针。
最佳答案
这就是我的解决方案。我试图把它从我的 fragment 中剪掉。如果有任何错误/语法问题,请告诉我。
public class MyFragment extends Fragment implements SensorEventListener {
private SensorManager mSensorManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSensorManager = (SensorManager) this.getActivity().getSystemService(Activity.SENSOR_SERVICE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.mylayout, container, false);
return rootView;
}
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0], y = event.values[1];
}
@Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }
@Override
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
// First starts (gets called before everything else)
if(mSensorManager == null) {
return;
}
if(menuVisible) {
this.registerSensorListener();
} else {
this.unregisterSensorListener();
}
}
@Override
public void onStart() {
super.onStart();
if(this.getUserVisibleHint()) {
this.registerSensorListener();
}
}
@Override
public void onStop() {
super.onStop();
this.unregisterSensorListener();
}
private void registerSensorListener() {
mSensorManager.registerListener(this, mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0), SensorManager.SENSOR_DELAY_FASTEST);
}
private void unregisterSensorListener() {
mSensorManager.unregisterListener(this);
}
}
关于java - fragment 上的传感器管理器(如果可见则添加;如果不可见则删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19047547/