web-dev-qa-db-ja.com

フラグメントで呼び出されたとき、getSystemServicesは未定義ですか?

TextViewsにセンサーの読み取り値を表示するFragmentが必要です。 SensorManagerを初期化しようとすると、getSystemServicesFragmentが未定義になります、とEclipseは言います。

フラグメント

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

    }
};

}

40
user2121

もう1つのメソッド呼び出し:

_sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);  
_

なぜ1つの余分なメソッド呼び出しですか?
システムサービスへのアクセスを提供するgetSystemService()メソッドは、Contextから取得されます。 ActivityContextを拡張し、Fragmentは拡張しません。したがって、最初にActivityが含まれるFragmentへの参照を取得してから、必要なシステムサービスを魔法のように取得する必要があります。

123
Little Child

つかいます:

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

フラグメントはシステムサービスを直接呼び出すことができません。これらのフラグメントが添付されているアクティビティを使用する必要があります

3
Usman Iqbal

Kotlinの使用:

this.sensorManager = activity!!.getSystemService(Context.SENSOR_SERVICE) as SensorManager
0
gundrabur

LayoutInflaterからコンテキストを取得することもできます。

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