2014-12-05 2 views
0

Я знаю, что многие ответили на этот вопрос, но я до сих пор не могу заставить свою работу работать. В классе StartWorkout я получаю данные с хронометра, и поскольку эти данные в миллисекундах, я использую метод, который я кодировал с помощью showElapsedtime(). для преобразования этих миллисекунд в секунды, минуты и часы. Я хочу передать эти данные в другой класс, называемый тренировками, но по какой-то причине он не работает. Я не получаю никаких данных, потому что получаю NUllPOINTEREXECPTIONПередача данных между фрагментами в Android

Вот мой код.

StartWorkout класс

package com.example.d_jara.apprunners; 

    public class StartWorkout extends Fragment{ 


    Button button; 
    Button button2; 
    Chronometer mChronometer; 
    private int hours = 0; 
    private int minutes = 0; 
    private int seconds=0; 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.lay_startworkout, container, false); 




     mChronometer = (Chronometer) rootView.findViewById(R.id.chronometer); 
     // mChronometer.setFormat("H:MM:SS"); 
     button = (Button) rootView.findViewById(R.id.mystart); 
     button.setOnClickListener(mStartListener); 
     mChronometer.setTextSize(70); 





     button2 = (Button) rootView.findViewById(R.id.finishWork); 
     //button2.setOnClickListener(mFinishListener); 
     //finish workout button 
     rootView.findViewById(R.id.finishWork).setVisibility(rootView.GONE); 




     //test code here 


     button2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 


       mChronometer.stop(); 
       button.setVisibility(v.VISIBLE); 
       button2.setVisibility(v.GONE); 
       Toast toast = Toast.makeText(getActivity().getBaseContext(),"Your workout was saved", Toast.LENGTH_LONG); 
       toast.show(); 
       toast.setGravity(Gravity.CENTER|Gravity.CENTER, 0, 0); 
       showElapsedTime(); 

       int c= 9; 
       Bundle args = new Bundle(); 
       Fragment newFragment = new workOuts(); 
       //number of calories 
       args.putInt("hours",hours); 
       args.putInt("seconds",seconds); 
       args.putInt("hours",hours); 
       newFragment.setArguments(args); 


      } 
     }); 







     return rootView; 
    } 


     View.OnClickListener mStartListener = new View.OnClickListener() { 
     public void onClick(View v) { 
      mChronometer.setBase(SystemClock.elapsedRealtime()-0); 
      mChronometer.start(); 
      button.setVisibility(v.GONE); 
      button2.setVisibility(v.VISIBLE); 


     } 
    }; 





    private void showElapsedTime() { 
     long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase(); 

     hours = (int) (elapsedMillis/3600000); 
     minutes = (int) (elapsedMillis - hours * 3600000)/60000; 
     seconds = (int) (elapsedMillis - hours * 3600000 - minutes * 60000)/1000; 






     } 



} 

А вот мои тренировки класса

 public class workOuts extends Fragment { 




    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.lay_workouts, container, false); 






      int myseconds = getArguments().getInt("seconds"); 
      int myhours = getArguments().getInt("hours"); 
      int myminutes = getArguments().getInt("minutes"); 


      String se=String.valueOf(myseconds); 
      String minu=String.valueOf(myminutes); 
      String hours=String.valueOf(myhours); 


      TextView sec1 = (TextView) rootView.findViewById(R.id.seconds); 
      TextView minute1 = (TextView) rootView.findViewById(R.id.minutes); 
      TextView hours1 = (TextView) rootView.findViewById(R.id.minutes); 

      sec1.setText(se); 
      minute1.setText(minu); 
     hours1.setText(hours); 













     return rootView; 
    } 


} 
+0

вы не используете менеджер фрагмента и фрагмента рассечение – Barun

+0

вы не начиная любой фрагмент, просто установив в него данные –

ответ

2
Bundle args = new Bundle(); 
      Fragment newFragment = new workOuts(); 
      //number of calories 
      args.putInt("hours",hours); 
      args.putInt("seconds",seconds); 
      args.putInt("hours",hours); 
      newFragment.setArguments(args); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(yourcontainerid, newFragment, "workout"); 
ft.commit(); 
+0

Где я могу найти идентификатор контейнера ?. Я использовал R.id.Container, но не работает. Он отображает текст в фрагменте startworkout, а не фрагмент тренировок. – danilojara123

+0

getFragmentManager() должен быть getChildFragmentManager() – cYrixmorten

+0

@ danilojara123 должен быть идентификатором макета в R.layout.lay_startworkout. Может быть, например, LinearLayout или RelativeLayout. Макет определяет пространство, в которое добавлен фрагмент, может быть корневым расположением Lay_startworkout.xml, чтобы заставить его заменить текущий фрагмент. – cYrixmorten

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