Я пытался найти ответ здесь.Я думаю, что я не правильно интерпретирую ответы, но на всякий случай здесь моя ситуация.Я использую кнопку из основной деятельности, чтобы открыть фрагмент.После открытия фрагмента я хочу, чтобы внешний класс выполнил математическую программу и отобразил результаты во фрагменте.Я могу получить результат для отображения во фрагменте, но не могу заставить математическую программу выполнить.Я знаю, как вызвать метод из внешнего класса, но я не уверен, куда его вставить. Должен ли я поместить его во фрагмент или в основное действие?
Моя первая попытка была использовать что-то вроде: Mercury test = new Mercury ();test.mCalculation;
Это работает, но я не уверен, как это использовать.
Вот основная деятельность:
public class MainActivity extends
AppCompatActivity implements
TestFragment.OnFragmentInteractionListener {
Button btnFavourites;
Mercury mercury;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFavourites = (Button) findViewById(R.id.button_test);
btnFavourites.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
android.support.v4.app.FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
TestFragment fragment = new TestFragment();
fragmentTransaction.add(R.id.frame_layout, fragment);
fragmentTransaction.commit();
btnFavourites.setVisibility(View.GONE);
}
});
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}
Вот фрагмент:
public class TestFragment extends Fragment {
// TODO: Rename parameter arguments, choose
names that match
// the fragment initialization parameters,
e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private TextView planetLongitude;
private TextView planetLatitude;
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
Mercury test;
private OnFragmentInteractionListener mListener;
public TestFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment TestFragment.
*/
// TODO: Rename and change types and number of parameters
public static TestFragment newInstance(String param1, String param2) {
TestFragment fragment = new TestFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_test, container, false);
planetLongitude = (TextView) view.findViewById(R.id.latitude);
planetLongitude.setText("" + Mercury.getLonecl());
return view;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
Здесьэто класс, который я хочу выполнить при открытии фрагмента:
public class Mercury {
public static double xv = 0;
public static double yv = 0;
private static double lonecl = 0;
private static double latecl = 0;
public static double N = 48.3313 + 3.24587e-5 * PlanetVariableCalculations.getd2();
public static double i = 7.0047 + 5.00e-8 * PlanetVariableCalculations.getd2();
public static double w = 29.1241 + 1.0144e-5 * PlanetVariableCalculations.getd2();
public static double a = 0.387098;
public static double e = 0.205635 + 5.59e-10 * PlanetVariableCalculations.getd2();
public static double M = 168.6562 + 4.0923344368 * PlanetVariableCalculations.getd2();
public static double w1 = N + w;
public static double L = M + w1;
public static double q = a * (1 - e);
public static double Q = a * (1 + e);
public static double E0 = 0;
public static double P = Math.pow(a, 1.5);
private void mCalculation() {
if (M < 0) {
while (M < 0) {
M = M + 360;
}
} else if (M > 360) {
while (M > 360) {
M = M - 360;
}
}
EccentricAnomaly(M);
}
private void EccentricAnomaly(double M) {
double angleInRadian = Math.toRadians(M);
double E = M + e * Math.sin(angleInRadian) * (1.0 + e * Math.cos(angleInRadian));
if (e > 0.06) {
E0 = E;
double angleInRadianE = Math.toRadians(E0);
double E1 = E0 - (E0 - e * Math.sin(angleInRadianE) - M) / (1 - e * Math.cos(angleInRadianE));
while (E1 != E0) {
E1 = E0;
E1 = E0 - (E0 - e * Math.sin(angleInRadianE) - M) / (1 - e * Math.cos(angleInRadianE));
}
xv = Math.cos(E1) - e;
yv = Math.sqrt(1.0 - e * e) * Math.sin(E1);
//} else{
xv = Math.cos(E) - e;
yv = Math.sqrt(1.0 - e * e) * Math.sin(E);
}
double v = Math.atan2(yv, xv);
double r = Math.sqrt(xv * xv + yv * yv);
double xh = r * (Math.cos(N) * Math.cos(v + w) - Math.sin(N) * Math.sin(v + w) * Math.cos(i));
double yh = r * (Math.sin(N) * Math.cos(v + w) - Math.cos(N) * Math.sin(v + w) * Math.cos(i));
double zh = r * (Math.sin(v + w) * Math.sin(i));
double lacteclsqr = Math.sqrt(xh * xh + yh * yh);
lonecl = 2+2;
latecl = Math.atan2(zh,lacteclsqr );
}
public static double getLonecl(){
return lonecl;
}
public static double getLatecl(){
return latecl;
}
}