I want to pass data to activity to fragment with use of Reference of Activity :
code as below:In MainActiivty
public Integer i = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thread = new Thread() {
@Override
public void run() {
try {
while (!thread.isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
i++;
}
});
}
} catch (InterruptedException e) {
}
}
};
thread.start();
}
In Fragment:
MainActivity ma=new MainActivity();
mySpeed = String.valueOf(ma.i);
Problem is value of i remain 0 , i can't get updated value of i
if I Store i into another Globe variable (j) and In fragment
MainActivity ma=new MainActivity();
mySpeed = String.valueOf(ma.j);
then i got Error
java.lang.NumberFormatException: For input string: "null"
at java.lang.Integer.parseInt(Integer.java:521)
at java.lang.Integer.valueOf(Integer.java:611)
whole code of Fragment
public class SpeedFragment extends Fragment {
View view;
TextView SpeedFrgvalue;
DigitSpeedView DigitrpmFrgView;
SpeedView speedometer;
Button DigitalView,Gaugeview;
LinearLayout linearLayoutspeed;
String mySpeed;
private int myInteger;
Thread thread;
public SpeedFragment() {
// Required empty public constructor
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
mySpeed = bundle.getString("speed");
Toast.makeText(getContext(),mySpeed,Toast.LENGTH_SHORT).show();
}
public void setMyInteger(int i) {
this.myInteger = i;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view=inflater.inflate(R.layout.fragment_speed, container, false);
SpeedFrgvalue=(TextView)view.findViewById(R.id.speedfrgvalue);
speedometer=(SpeedView)view.findViewById(R.id.speedViewfrag);
Gaugeview=(Button)view.findViewById(R.id.Gaugeviewid);
DigitalView=(Button)view.findViewById(R.id.digitalviewid);
SpeedFrgvalue.setText(String.valueOf(myInteger));
linearLayoutspeed=(LinearLayout)view.findViewById(R.id.digitalspeedlinaear);
DigitrpmFrgView=(DigitSpeedView)view.findViewById(R.id.digitalSpeedfrgid);
DigitrpmFrgView.updateSpeed((myInteger));
speedometer.setMaxSpeed(250);
// speedometer.speedTo(Integer.valueOf(mySpeed),4000);
return view;
}
}
Inside Oncreate of MainActiivty I am calling setMyInteger; Same as mention by yusaf.