2014-06-26 7 views
28

Ich möchte TextViews, um die Sensoren Messwerte in einem Fragment anzuzeigen. Beim Versuch, die SensorManager zu initialisieren ist undefined in der Fragment, sagt Eclipse.Why und wie es zu beheben.getSystemServices ist nicht definiert, wenn in einem Fragment aufgerufen?

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 

    } 
}; 

}

Antwort

101

Noch ein Methodenaufruf:

sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE); 

Warum diese eine zusätzliche Methode aufrufen?
Die getSystemService() Methode, die Zugriff auf Systemdienste bietet, stammt von Context. Eine Activity verlängert Context, eine Fragment nicht. Daher müssen Sie zuerst einen Verweis auf die Activity erhalten, in der die Fragment enthalten ist und dann magisch den gewünschten Systemdienst abrufen.

19

Verwendung:

getActivity().getSystemService(name) 
2
sensorManager = (SensorManager) getActivity().getSystemService(Context.NAMEOF_SERVICE); 

Fragmente können Systemdienste nicht direkt aufrufen, Sie haben Aktivität zu verwenden, mit denen diese Fragment

Attached