Обновление вкладок на Android? - PullRequest
0 голосов
/ 28 ноября 2011

Когда я выбираю город на 3-й вкладке, я хочу, чтобы он отображался на вкладке «Карта».Например, когда я впервые выбираю «Остин» в качестве города, он отображается на карте (как показано на рисунке ниже).Но когда я снова возвращаюсь на вкладку «Город» и выбираю другой город, он не обновляется на вкладке «Карта».Подскажите, пожалуйста, есть ли способ обновлять «MapsActicity» каждый раз, когда я нажимаю на вкладку «Карта».

public class HelloTabWidget extends TabActivity implements OnTabChangeListener {`

    private TabHost mtabHost;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      

        Resources res = getResources(); 
        TabHost tabHost = getTabHost(); 
        TabHost.TabSpec spec;  
        Intent intent;  
        mtabHost = getTabHost();
        mtabHost.setOnTabChangedListener(this);

        intent = new Intent().setClass(this, BarActivity.class);        
        spec = tabHost.newTabSpec("Name").setIndicator("Name",res.getDrawable(R.drawable.ic_tab_bar)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, MapsActivity.class);
        spec = tabHost.newTabSpec("Map").setIndicator("Map",res.getDrawable(R.drawable.ic_tab_map)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, CityActivity.class);
        spec = tabHost.newTabSpec("city").setIndicator("City", res.getDrawable(R.drawable.ic_tab_city)).setContent(intent); 
        tabHost.addTab(spec);

        tabHost.setCurrentTab(2);
    }

    public void onTabChanged(String tabId) {        
        int a = mtabHost.getCurrentTab();
        String b = Integer.toString(a); 
        if(b.equals("1"))
        {           
            Toast.makeText(getApplicationContext(), "Map Selected", Toast.LENGTH_LONG).show();
        }               
    } 
}

enter image description here

Обновление:

     `public class MapsActivity extends MapActivity 
     {  
MapView mapView;  
MapController mc;
GeoPoint p;`

class MapOverlay extends com.google.android.maps.Overlay
{
    @Override
    public boolean draw(Canvas canvas, MapView mapView, 
    boolean shadow, long when) 
    {
        super.draw(canvas, mapView, shadow); 
        Point screenPts = new Point();
        mapView.getProjection().toPixels(p, screenPts);
         Bitmap bmp = BitmapFactory.decodeResource(
            getResources(), R.drawable.pushpin);            
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
        return true;
    }
 }

@Override
public void onCreate(Bundle savedInstanceState)
{       
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main4);

    mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
    View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
        new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true);


    String []coordinates = new String[4];
    coordinates[0] = "33.477863"; coordinates[1] = "-101.855166"; //Just in-case user didn't choose a city 

    if(CityActivity.value.equals("Austin")) { //This 'value' is recived from CityActivity. Depending on what city user chooses.
        coordinates[0] = "30.260053"; coordinates[1] = "-97.738593"; }
    else if(CityActivity.value.equals("Dallas")) {
        coordinates[0] = "33.554519"; coordinates[1] = "-101.855621"; }
    else if(CityActivity.value.equals("Slaton")) {
        coordinates[0] = "33.577863"; coordinates[1] = "-101.855166"; }


    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    p = new GeoPoint(
        (int) (lat * 1E6), 
        (int) (lng * 1E6));

    mc = mapView.getController();
    mc.animateTo(p);
    mc.setZoom(16); 
    mapView.invalidate();

    MapOverlay mapOverlay = new MapOverlay();
    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(mapOverlay);     
    mapView.invalidate();
}

@Override
protected boolean isRouteDisplayed() {
    return false;
}  }

Ответы [ 2 ]

1 голос
/ 28 ноября 2011
String []coordinates = new String[4];
coordinates[0] = "33.477863"; coordinates[1] = "-101.855166"; //Just in-case user didn't choose a city 

if(CityActivity.value.equals("Austin")) { //This 'value' is recived from CityActivity. Depending on what city user chooses.
    coordinates[0] = "30.260053"; coordinates[1] = "-97.738593"; }
else if(CityActivity.value.equals("Dallas")) {
    coordinates[0] = "33.554519"; coordinates[1] = "-101.855621"; }
else if(CityActivity.value.equals("Slaton")) {
    coordinates[0] = "33.577863"; coordinates[1] = "-101.855166"; }


double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);

p = new GeoPoint(
    (int) (lat * 1E6), 
    (int) (lng * 1E6));


mc = mapView.getController();
mc.animateTo(p);
mc.setZoom(16); 
mapView.invalidate();

MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);     
mapView.invalidate();

Попробуйте переместить этот код в метод OnResume ()

0 голосов
/ 28 ноября 2011

Подскажите, пожалуйста, есть ли способ обновить «MapsActicity» каждый раз, когда я нажимаю на вкладку «Карта».

Сначала перенесите фокус в новый город

  mapController.animateTo(new GeoPoint(   (int) (lat * 1E6), 
        (int) (lng * 1E6))

или mapView.invalidate() / mapView.postInvalidate() для обновления ваших карт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...