web-dev-qa-db-fra.com

getSystemServices n'est pas défini lorsqu'il est appelé dans un fragment?

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

    }
};

}

32
user2121

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é. 

114
Little Child

Utilisation:

getActivity().getSystemService(name)
19
Zoran
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 

3
Usman Iqbal

Vous pouvez également obtenir le contexte à partir de LayoutInflater.

SensorManager sm = (SensorManager) getLayoutInflater().getContext().getSystemService(Context.SENSOR_SERVICE);
0
Jeffrey