Ich habe die folgende Layoutdatei. Grundsätzlich habe ich Google Map und oben links habe ich eine TextView
, wo ich Zähler alle 15 Sekunden sagen muss, um die Karte zu aktualisieren. Das Layout ist in Ordnung.Android TextView Timer aktualisieren und Karteninhalt aktualisieren?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
tools:context="com.example.ns.appversion1.MapActivityFragment1"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="2" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="left"
android:padding="3dp"
android:id="@+id/textRefresh"
android:background="@drawable/border"
android:text="Refreshing 1"
android:textColor="#03A9FA"
android:textSize="12sp" />
</LinearLayout>
</FrameLayout>
</RelativeLayout>
Unten sind meine Codes. In der View-Funktion versuche ich eine Handler
Funktion zu implementieren um den Zähler zu halten. Daher möchte ich alle 15 Sekunden die Funktion JSON
aufrufen, um die letzten lat-Werte abzurufen und entsprechend auf der Karte zu plotten. Ich bin jetzt im ersten Schritt hier stecken, wo es mir Fehler sagt, cant zugreifen Variable timeleft
, m_handlerTask
und m_handler
von innerhalb der inneren Klasse? Ich möchte den Countdown anzeigen, damit der Benutzer in den nächsten 15 Sekunden weiß, dass die Karte aktualisiert wird?
public class MapActivityFragment1 extends Fragment implements OnMapReadyCallback {
private GoogleMap mMap;
TextView tv;
// 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";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
private OnFragmentInteractionListener mListener;
public MapActivityFragment1() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
public static MapActivityFragment1 newInstance(String param1, String param2) {
MapActivityFragment1 fragment = new MapActivityFragment1();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map_activity_fragment1, null, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
tv = (TextView) getActivity().findViewById(R.id.textRefresh);
Handler m_handler;
Runnable m_handlerTask ;
final int timeleft=15000;
final m_handler = new Handler();
final m_handlerTask = new Runnable()
{
@Override
public void run() {
if(timeleft>=0)
{
// do stuff
Log.i("timeleft",""+timeleft);
timeleft--;
tv.setText("Refreshing in "+timeleft);
}
else
{
m_handler.removeCallbacks(m_handlerTask); // cancel run
}
m_handler.postDelayed(m_handlerTask, 1000);
}
};
m_handlerTask.run();
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
Ich habe Charus Lösung wie folgt versucht.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map_activity_fragment1, null, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
tv = (TextView) getActivity().findViewById(R.id.textRefresh);
MyCount counter = new MyCount(15000, 1000);
counter.start();
return view;
}
Sie sagten viel. was genau willst du machen;) 1. Karte in 15 s neu laden, oder Countdown benutzen? –
Ich möchte nur einen Countdown auf meinem Label zeigen – user5313398
Sage es von 15 dann 14 dann 13 usw. bis 1, dann rufe ich einen JSON, um die Karte zu aktualisieren? – user5313398