Je veux que TextViews
affiche les lectures des capteurs dans une Fragment
. Lors de la tentative d'initialisation de SensorManager
, la getSystemServices
n'est pas définie dans la Fragment
, explique Eclipse.Why et comment y remédier.
Fragment
public class FragSensors extends Fragment {
private TextView accXTv, accYTv, accZTv;
private SensorManager sensorManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.frag_sensors, container, false);
accXTv = (TextView) v.findViewById(R.id.accXValue);
accYTv = (TextView) v.findViewById(R.id.accYValue);
accZTv = (TextView) v.findViewById(R.id.accZValue);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
private final SensorEventListener mSensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
};
}
Juste un autre appel de méthode:
sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
Pourquoi cet appel de méthode supplémentaire?
la méthode getSystemService()
qui donne accès aux services système provient de Context
. Un Activity
étend Context
, un Fragment
ne le fait pas. Par conséquent, vous devez d'abord obtenir une référence à la Activity
dans laquelle la Fragment
est contenue, puis récupérer par magie le service système souhaité.
Utilisation:
getActivity().getSystemService(name)
sensorManager = (SensorManager) getActivity().getSystemService(Context.NAMEOF_SERVICE);
Les fragments ne peuvent pas appeler directement les services système, vous devez utiliser l'activité avec laquelle ces fragments sont joints
Vous pouvez également obtenir le contexte à partir de LayoutInflater.
SensorManager sm = (SensorManager) getLayoutInflater().getContext().getSystemService(Context.SENSOR_SERVICE);