2014-06-26 13 views
28

Desidero TextViews visualizzare le letture dei sensori in un Fragment. Quando si tenta di inizializzare lo SensorManager il getSystemServices non è definito nello Fragment, eclipse dice. Perché e come risolverlo.getSystemServices non è definito quando viene chiamato in un frammento?

Frammento

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 

    } 
}; 

}

risposta

101

Ancora una chiamata di metodo:

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

Perché una chiamata di metodo in più?
il metodo getSystemService() che fornisce l'accesso ai servizi di sistema proviene da Context. Un Activity estende Context, un Fragment no. Quindi, è necessario prima ottenere un riferimento allo Activity in cui è contenuto lo Fragment e quindi recuperare magicamente il servizio di sistema desiderato.

19

Usa:

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

Frammenti Non è possibile chiamare direttamente i servizi di sistema, è necessario utilizzare attività con cui questi frammenti è attaccato

Problemi correlati