2014-12-13 3 views
0

Так ниже код работает на деятельности, но как только я добавить его к фрагменту с onCreateView приложение падаеткод работает на деятельности, но не фрагментировать

Может кто-нибудь помочь мне перефразировать это для фрагмента или объяснить мне что происходит не так?

благодаря

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.daytrackstephenh E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.stephenh.daytrack.daytrackstephenh, PID: 98 java.lang.NullPointerException at com.stephenh.daytrack.daytrackstephenh.SwipeViewsAdapter.Step s.SetUpPedometer (Steps.java:101) at com.stephenh.daytrack.daytrackstephenh.SwipeViewsAdapter.Steps.onCreateView (Steps.java:188) at 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) at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1489) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions (FragmentManager.java: 486) at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate (FragmentStatePagerAdap ter.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 (Хореограф.java:761) на android.view.Choreographer.doCallbacks (Хореограф.java:574) на android.view.Choreographer.doFrame (Хореограф.java:543) на android.view.Choreographer $ FrameDisplayEventReceiver.run (Хореограф.java:747) на android.os.Handler.handleCallback (Handler.java:743) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:136) at android.app.ActivityThread.main (ActivityThread.java:5212) at java.lang.reflect.Method.invokeNative (собственный метод) at java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:602) at dalvik.system.NativeStart.main (Родной метод)

+2

Что говорит лог-кошка? –

+1

и где находится фрагмент? – Blackbelt

+0

@ Mr.Concolato здесь logcat при добавлении бегущего фрагмента –

ответ

2

В деятельности жизненного цикла деятельности использует 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(); 
} 

и попробуйте войти эти значения в ма ke уверены, что они не уходят в ноль, прежде чем устанавливать их в текстовое поле

// Gather the values from accelerometer 
    float x = event.values[0]; 
    float y = event.values[1]; 
    float z = event.values[2]; 
+0

Я получаю Nullpointerexception, когда он попадает в setUpPedometer (rootview), а также в раздел setonlistner кнопки метода setuppedometer :( –

+0

У меня нет IDE на данный момент .. так или иначе .. его либо вы указываете на неправильный r.id.textiewstep или ... что метод oncreate в файле fragment.try удаляет его – krispymallows

Смежные вопросы