Java 代码对活动有效,但对片段无效
因此,下面的代码适用于某个活动,但一旦我使用onCreateView将其添加到片段中,应用程序就会崩溃 有谁能帮我把这句话换成一个片段,或者向我解释一下哪里出了问题 谢谢Java 代码对活动有效,但对片段无效,java,android,android-activity,fragment,Java,Android,Android Activity,Fragment,因此,下面的代码适用于某个活动,但一旦我使用onCreateView将其添加到片段中,应用程序就会崩溃 有谁能帮我把这句话换成一个片段,或者向我解释一下哪里出了问题 谢谢 public class Exercises extends Activity { // Display fields for Accelerometer private TextView textViewX; private TextView textViewY; private Text
public class Exercises extends Activity {
// Display fields for Accelerometer
private TextView textViewX;
private TextView textViewY;
private TextView textViewZ;
// Display Fields for Sensitivity
private TextView textSensitive;
// Display for Steps
private TextView textViewSteps;
// Reset Button
private Button buttonReset;
// Sensor Manager
private SensorManager sensorManager;
private float acceleration;
// Values to Calculate Number of Steps
private float previousY;
private float currentY;
private int numSteps;
// Seekbar Fields
private SeekBar seekBar;
private int threshold; // Point at which we want to trigger a 'step'
@Override
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.steps_layout);
try {
SetUpPedometer();
} catch (Exception e) {
e.printStackTrace();
}
}
public void SetUpPedometer(){
// Attach objects to XML View
textViewX=(TextView)findViewById(R.id.textViewX);
textViewY=(TextView)findViewById(R.id.textViewY);
textViewZ=(TextView)findViewById(R.id.textViewZ);
//Attach Step and Sensitive View Objects to XML
textViewSteps=(TextView)findViewById(R.id.textSteps);
textSensitive=(TextView)findViewById(R.id.textSensitive);
//Attach the resetButton to XML
buttonReset = (Button)findViewById(R.id.buttonReset);
//Attach the seekBar to XML
seekBar = (SeekBar)findViewById(R.id.seekBar);
//Set the Values on the seekBar, threshold, and threshold display
seekBar.setProgress(10);
seekBar.setOnSeekBarChangeListener(seekBarListener);
threshold=10;
textSensitive.setText(String.valueOf(threshold));
// Initialize Values
previousY = 0;
currentY = 0;
numSteps =0;
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
numSteps = 0;
textViewSteps.setText(String.valueOf(numSteps));
}
});
// Initialize acceleration Values
acceleration = 0.00f;
// Enable the listener - We will write this later in the class
enableAccelerometerListening();
}
private void enableAccelerometerListening(){
//Initialise the Sensor Manager
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(sensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
private SensorEventListener sensorEventListener=new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// Gather the values from accelerometer
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// Fetch the current y
currentY = y;
// Measure if a step is taken
if ( Math.abs(currentY-previousY) > threshold) {
numSteps++;
textViewSteps.setText(String.valueOf(numSteps));
} //end if
// Display the Values
textViewX.setText(String.valueOf(x));
textViewY.setText(String.valueOf(y));
textViewZ.setText(String.valueOf(z));
// Store the previous Y
previousY =y;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
public void buttonReset() {
numSteps = 0;
textViewSteps.setText(String.valueOf(numSteps));
}
private SeekBar.OnSeekBarChangeListener seekBarListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
threshold = seekBar.getProgress();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
};
}
碎片
公共类步骤扩展了片段{
// Display fields for Accelerometer
private TextView textViewX;
private TextView textViewY;
private TextView textViewZ;
// Display Fields for Sensitivity
private TextView textSensitive;
// Display for Steps
private TextView textViewSteps;
// Reset Button
private Button buttonReset;
// Sensor Manager
private SensorManager sensorManager;
private float acceleration;
// Values to Calculate Number of Steps
private float previousY;
private float currentY;
private int numSteps;
// Seekbar Fields
private SeekBar seekBar;
private int threshold; // Point at which we want to trigger a 'step'
@Override
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
}
public void SetUpPedometer(View S){
// Attach objects to XML View
textViewX=(TextView)S.findViewById(R.id.textViewX);
textViewY=(TextView)S.findViewById(R.id.textViewY);
textViewZ=(TextView)S.findViewById(R.id.textViewZ);
//Attach Step and Sensitive View Objects to XML
textViewSteps=(TextView)S.findViewById(R.id.textSteps);
textSensitive=(TextView)S.findViewById(R.id.textSensitive);
//Attach the resetButton to XML
buttonReset = (Button)S.findViewById(R.id.buttonReset);
//Attach the seekBar to XML
seekBar = (SeekBar)S.findViewById(R.id.seekBar);
//Set the Values on the seekBar, threshold, and threshold display
seekBar.setProgress(10);
seekBar.setOnSeekBarChangeListener(seekBarListener);
threshold=10;
textSensitive.setText(String.valueOf(threshold));
// Initialize Values
previousY = 0;
currentY = 0;
numSteps =0;
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
numSteps = 0;
textViewSteps.setText(String.valueOf(numSteps));
}
});
// Initialize acceleration Values
acceleration = 0.00f;
// Enable the listener - We will write this later in the class
enableAccelerometerListening();
}
private void enableAccelerometerListening(){
//Initialise the Sensor Manager
sensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(sensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
private SensorEventListener sensorEventListener=new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// Gather the values from accelerometer
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// Fetch the current y
currentY = y;
// Measure if a step is taken
if ( Math.abs(currentY-previousY) > threshold) {
numSteps++;
textViewSteps.setText(String.valueOf(numSteps));
} //end if
// Display the Values
textViewX.setText(String.valueOf(x));
textViewY.setText(String.valueOf(y));
textViewZ.setText(String.valueOf(z));
// Store the previous Y
previousY =y;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
public void buttonReset() {
numSteps = 0;
textViewSteps.setText(String.valueOf(numSteps));
}
private SeekBar.OnSeekBarChangeListener seekBarListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
threshold = seekBar.getProgress();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View S = inflater.inflate(R.layout.steps_layout, container, false);
try {
SetUpPedometer(S);
} catch (Exception e) {
e.printStackTrace();
}
return S;
}
}
12-13 15:17:15.062 984-984/com.stephenh.daytrack.daytrack stephenh E/AndroidRuntime﹕ 致命异常:主
进程:com.stephenh.daytrack.daytrackstephenh,PID:984
java.lang.NullPointerException
位于com.stephenh.daytrack.daytrackstephenh.SwipeViewsAdapter.Steps.SetUpPedometer(Steps.java:101)
位于com.stephenh.daytrack.daytrackstephenh.SwipeViewsAdapter.Steps.onCreateView(Steps.java:188)
位于android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
位于android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
位于android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
位于android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
在android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)上
位于android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
在android.support.v4.view.ViewPager.populate上(ViewPager.java:919)
在android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
在android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
位于android.view.Choreographer.doCallbacks(Choreographer.java:574)
位于android.view.Choreographer.doFrame(Choreographer.java:543)
在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)中
位于android.os.Handler.handleCallback(Handler.java:743)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5212)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
在活动生命周期中的dalvik.system.NativeStart.main(本机方法)中,活动使用onCreate,而片段使用onCreate
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View rootView = inflater.inflate(R.layout.steps_layout,
container, false);
SetUpPedometer(rootView);
return rootView;
}
public void SetUpPedometer(View view){
// Attach objects to XML View
textViewX=(TextView)view.findViewById(R.id.textViewX);
textViewY=(TextView)view.findViewById(R.id.textViewY);
textViewZ=(TextView)view.findViewById(R.id.textViewZ);
//Attach Step and Sensitive View Objects to XML
textViewSteps=(TextView)view.findViewById(R.id.textSteps);
textSensitive=(TextView)view.findViewById(R.id.textSensitive);
//Attach the resetButton to XML
buttonReset = (Button)view.findViewById(R.id.buttonReset);
//Attach the seekBar to XML
seekBar = (SeekBar)view.findViewById(R.id.seekBar);
//Set the Values on the seekBar, threshold, and threshold display
seekBar.setProgress(10);
seekBar.setOnSeekBarChangeListener(seekBarListener);
threshold=10;
textSensitive.setText(String.valueOf(threshold));
// Initialize Values
previousY = 0;
currentY = 0;
numSteps =0;
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
numSteps = 0;
textViewSteps.setText(String.valueOf(numSteps));
}
});
// Initialize acceleration Values
acceleration = 0.00f;
// Enable the listener - We will write this later in the class
enableAccelerometerListening();
}
在将这些值设置为文本视图之前,请尝试记录这些值,以确保它们不会变为null
// Gather the values from accelerometer
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
log cat怎么说?片段在哪里?@Mr.Concolato添加运行片段时这里是logcat当它点击setUpPedometer(rootview)以及setUpPedometer方法的按钮setonlistner部分时,我得到一个NullPointer异常:(我目前没有IDE..所以不管怎样..可能是您指向了错误的r.id.textiewstep,或者..在片段中的oncreate方法。尝试删除它