es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conviero la actividad a FragmentActivity pero ahora no puedo agregar la ActionBar.

public class LocationActivity extends FragmentActivity implements OnMapReadyCallback {
    public static final String EXTRA_DATA = "EXTRA_DATA";
    Item item;
    GoogleMap map;
    String title, address, info;
    Double lon, lat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);

        // Inicializo el fragmento de mapa
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_current_map);
        mapFragment.getMapAsync(this);

        // Obtengo los datos de forma serializable
        item = (Item) getIntent().getSerializableExtra(EXTRA_DATA);
        lat = Double.parseDouble(item.getLatitude());
        lon = Double.parseDouble(item.getLongitude());
        title = item.getTitle();
        address = item.getAddress();

        // Concateno las cadenas para mostrar en el mapa
        info = String.format("%s /n %s", title, address);

        FragmentTransaction mFragmentTransaction = getFragmentManager()
            .beginTransaction();
        mFragmentTransaction.addToBackStack(null);
    }

    // Este evento habilitará la función de retroceso al presionar el botón
    @Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() == 0) {
            this.finish();
        }
        else {
            getFragmentManager().popBackStack();
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        map = googleMap;
        LatLng Location = new LatLng(lat, lon);
        Toast.makeText(this, lat + " " + lon, Toast.LENGTH_SHORT).show();
        map.addMarker(new MarkerOptions().position(Location).title(info));
        map.moveCamera(CameraUpdateFactory.newLatLng(Location));
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar una barra de aplicaciones (action bar) a tu Fragment Activity, necesitas modificar tu archivo de diseño XML (activity_location.xml en este caso) para incluir una Toolbar y luego configurarla como la action bar.

    1. Modifica activity_location.xml:
    <androidx.coordinatorlayout.widget.coordinatorlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent">
    
      <androidx.appcompat.widget.toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollflags="scroll|enterAlways"></androidx.appcompat.widget.toolbar>
    
      <framelayout android:layout_width="match_parent" android:layout_height="match_parent">
    
        <fragment android:id="@+id/google_current_map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent"></fragment>
    
      </framelayout>
    
    </androidx.coordinatorlayout.widget.coordinatorlayout>
    

    Esto agregará una Toolbar a tu diseño.

    1. En el método onCreate de tu Fragment Activity, configura la Toolbar como la action bar:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);
    
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        // ...
    }
    

    Esto configurará la Toolbar como la action bar y podrás agregar navegación hacia atrás usando el siguiente código:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
    

    Esto agregará el botón de retroceso a la Toolbar y, al hacer clic en él, volverá a la actividad anterior.

Comments are closed.