android - 异步任务完成后谷歌地图 fragment 更新/刷新

标签 android android-fragments google-maps-android-api-2

public class TestActivity extends Activity implements OnMarkerClickListener{
  static  LatLng HAMBURG = new LatLng(53.558, 9.927);
  static  LatLng KIEL = new LatLng(53.551, 9.993);
  private GoogleMap map;
  Marker hamburg, kiel;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
        .getMap();
    hamburg = map.addMarker(new MarkerOptions().position(HAMBURG).title("Hamburg"));
    kiel = map.addMarker(new MarkerOptions().position(KIEL).title("Kiel"));

    Polyline line = map.addPolyline(new PolylineOptions().add(HAMBURG,KIEL).width(5).color(Color.RED));

    // Move the camera instantly to hamburg with a zoom of 15.
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

    // Zoom in, animating the camera.
    map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);


     AsyncTaskRunner runner = new AsyncTaskRunner();    
     runner.execute();
  }



  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }


  private class AsyncTaskRunner extends AsyncTask<String, String, String> {

      String result;ProgressDialog pdia;

      @Override
      protected String doInBackground(String... params) {
       publishProgress("Loading..."); // Calls onProgressUpdate()
        TestActivity.HAMBURG = new LatLng(3.190393, 101.651317);
        TestActivity.KIEL = new LatLng(3.148443,101.577099);

       return result;
      }


      @Override
      protected void onPostExecute(String result) {

       pdia.dismiss();
      }


      @Override
      protected void onPreExecute() {

          super.onPreExecute();
          pdia = ProgressDialog.show(TestActivity.this, "Please wait", "Loading data from database.", true, false);       
      }


      @Override
      protected void onProgressUpdate(String... text) {

      }
     }
} 

我需要执行的是将标记(HAMBURG 和 KIEL)更改为异步任务中设置的位置。同样在listview中我使用了notifydatachanged(),这种情况怎么办?

请说明一些问题,并在此先感谢您。

最佳答案

ListView 中没有notifyDataChanged 方法,您需要手动更改标记的位置。

首先,制作kielline类级别的字段,如hamburg。然后,在您的 AsyncTaskonPostExecute 方法中,添加:

hamburg.setPosition(HAMBURG);
kiel.setPosition(KIEL);
line.setPoints(Arrays.asList(new LatLng[] { HAMBURG, KIEL }));

关于android - 异步任务完成后谷歌地图 fragment 更新/刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21360584/

相关文章:

android - Fragment Button onClick 没有触发......我错过了什么?

android - OnDragListener 不适用于 DialogFragment

android - 多个 map 的最佳实践

android - Google Maps v2 Marker zOrdering - 置顶

android - 无法解析符号 getFusedLocationProviderClient 和 LocationCallback

android - 如何使用 EditText 在 Android 中检索字符串?

java - Android - 离开 Activity 时停止所有线程

android - shutdown() 可以用于 Android 内容提供程序中的清理操作吗?

android - 如何强制 WebView 将长行文本分成多行?

java - 如何在Android中获取应用程序数据目录