Potrzebuję pomocy w aktualizacji TextView w fragmencie o czas podany w aktywności.
Nie mam kompletnie pojęcia jak się za to zabrać
MainActivity
package com.example.weatherapp;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.annotation.SuppressLint;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class CoreActivity extends AppCompatActivity implements Runnable {
static double longtitude;
static double latitude;
static int refreshRate;
public static double getLongtitude() {
return longtitude;
}
static public double getLatitude() {
return latitude;
}
static public int getRefreshRate() {
return refreshRate;
}
@Override
public void run() {
}
public static class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
// Returns total number of pages
@Override
public int getCount() {
int NUM_ITEMS = 2;
return NUM_ITEMS;
}
// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
switch (position) {
case 0: // Fragment # 0 - This will show FirstFragment
return FragmentSun.newInstance(0, "Sun", CoreActivity.getLongtitude(), CoreActivity.getLatitude(), CoreActivity.getRefreshRate());
case 1: // Fragment # 0 - This will show FirstFragment different title
return MoonFragment.newInstance(1, "Moon", CoreActivity.getLongtitude(), CoreActivity.getLatitude(), CoreActivity.getRefreshRate());
default:
return null;
}
}
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
}
FragmentPagerAdapter adapterViewPager;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
longtitude = getIntent().getDoubleExtra("longtitude", longtitude);
latitude = getIntent().getDoubleExtra("latitude", latitude);
refreshRate = getIntent().getIntExtra("refreshRate", refreshRate);
if ((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_NORMAL) {
setContentView(R.layout.activity_core);
super.onCreate(savedInstanceState);
// this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // ONLY PORTRAIT MODE
TextView txtLongtitude = findViewById(R.id.txtLongtitude);
txtLongtitude.setText("Longtitude : " + longtitude);
TextView txtLatitude = findViewById(R.id.txtLatitude);
txtLatitude.setText("Latitude : " + latitude);
ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager);
adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
vpPager.setAdapter(adapterViewPager);
vpPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
// This method will be invoked when a new page becomes selected.
@Override
public void onPageSelected(int position) {
Toast.makeText(CoreActivity.this,
"Selected page position: " + position, Toast.LENGTH_SHORT).show();
}
// This method will be invoked when the current page is scrolled
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// Code goes here
}
// Called when the scroll state changes:
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
@Override
public void onPageScrollStateChanged(int state) {
// Code goes here
}
});
} else {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setContentView(R.layout.activity_core);
super.onCreate(savedInstanceState);
TextView txtLongtitude = findViewById(R.id.txtLongtitude);
txtLongtitude.setText("Longtitude : " + longtitude);
TextView txtLatitude = findViewById(R.id.txtLatitude);
txtLatitude.setText("Latitude : " + latitude);
FragmentSun fragmentSun = FragmentSun.newInstance(0, "Page # 1", CoreActivity.getLongtitude(), CoreActivity.getLatitude(), CoreActivity.getRefreshRate());
MoonFragment moonFragment = MoonFragment.newInstance(0, "Page # 1", CoreActivity.getLongtitude(), CoreActivity.getLatitude(), CoreActivity.getRefreshRate());
getSupportFragmentManager().beginTransaction().replace(R.id.SunID, fragmentSun).commit();
getSupportFragmentManager().beginTransaction().replace(R.id.MoonID, moonFragment).commit();
} else {
setContentView(R.layout.activity_core);
super.onCreate(savedInstanceState);
TextView txtLongtitude = findViewById(R.id.txtLongtitude);
txtLongtitude.setText("Longtitude : " + longtitude);
TextView txtLatitude = findViewById(R.id.txtLatitude);
txtLatitude.setText("Latitude : " + latitude);
ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager);
adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
vpPager.setAdapter(adapterViewPager);
vpPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
// This method will be invoked when a new page becomes selected.
@Override
public void onPageSelected(int position) {
Toast.makeText(CoreActivity.this,
"Selected page position: " + position, Toast.LENGTH_SHORT).show();
}
// This method will be invoked when the current page is scrolled
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// Code goes here
}
// Called when the scroll state changes:
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
@Override
public void onPageScrollStateChanged(int state) {
// Code goes here
}
});
}
}
}
}
Fragment w którym mają być aktualizowane TextView o wartość "refreshRate"
package com.example.weatherapp;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.astrocalculator.AstroCalculator;
import com.astrocalculator.AstroDateTime;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class FragmentSun extends Fragment {
private String title;
private int page;
double latitude;
double longtitude;
int refreshRate;
public FragmentSun() {
// Required empty public constructor
}
public static FragmentSun newInstance(int page, String title,double latitude,double longtitude, int refreshRate)
{
FragmentSun fragmentSun = new FragmentSun();
Bundle args = new Bundle();
args.putDouble("longtitude",longtitude);
args.putDouble("latitude",latitude);
args.putInt("refreshRate",refreshRate);
args.putInt("someInt",page);
args.putString("someTitle",title);
fragmentSun.setArguments(args);
return fragmentSun;
}
// Store instance variables based on arguments passed
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("someInt", 0);
title = getArguments().getString("someTitle");
longtitude = getArguments().getDouble("longtitude", 0);
latitude = getArguments().getDouble("latitude", 0);
refreshRate = getArguments().getInt("refreshRate", 0);
}
@RequiresApi(api = Build.VERSION_CODES.O)
@SuppressLint("SetTextI18n")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
DecimalFormat numberFormat = new DecimalFormat("#.00");
Calendar calendar = Calendar.getInstance();
AstroCalculator astroCalculator = new AstroCalculator(new AstroDateTime(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH)+1,calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND),0,true),new AstroCalculator.Location(latitude,longtitude));
View view = inflater.inflate(R.layout.fragment_sun, container, false);
TextView txtSunrisetime = (TextView) view.findViewById(R.id.txtSunriseTime);
txtSunrisetime.setText(astroCalculator.getSunInfo().getSunrise().toString().substring(0,19));
TextView txtSunriseAzimuth = (TextView) view.findViewById(R.id.txtSundriseAzimuth);
txtSunriseAzimuth.setText("Azimuth : "+(numberFormat.format(astroCalculator.getSunInfo().getAzimuthRise())));
TextView txtSunsetTime = (TextView) view.findViewById(R.id.txtSunsetTime);
txtSunsetTime.setText(astroCalculator.getSunInfo().getSunset().toString().substring(0,19));
TextView txtSunsetAzimuth = (TextView) view.findViewById(R.id.txtSunsetAzimuth);
txtSunsetAzimuth.setText("Azimuth : "+numberFormat.format(astroCalculator.getSunInfo().getAzimuthSet()));
TextView txtTwilightEvening = (TextView) view.findViewById(R.id.txtTwilightEvening);
txtTwilightEvening.setText(astroCalculator.getSunInfo().getTwilightEvening().toString().substring(0,19));
TextView txtTwilightMorning = (TextView) view.findViewById(R.id.txtTwilightMorning);
txtTwilightMorning.setText(astroCalculator.getSunInfo().getTwilightMorning().toString().substring(0,19));
return view;
}
}