PDA

Ver la Versión Completa : [ SOLUCIONADO ] Por qué esto no me funciona??


monchyrcg
14/03/12, 09:36:46
Bueno estoy haciendo pruebas para una aplicación que me estoy currando para mi cuñado. Se trata de un maps donde leo un xml, en el xml hay diversas ciudades con su nombre,provincia y pagina web, una vez leo el xml en cada ciudad pongo un marcador. Este marcador es clickable, y cuando pulso sobre el me aparece en un dialog(de momento muy cutre) la información. Lo que no me funciona es que cuando pulso en la pagina web(se trata de un TextView en color azul) no soy capaz de que me vaya a la pagina web.

Esto lo he hecho otras veces, la única diferencia que encuentro, es que mi clase principal era una Activity no un MapActivity, es decir he hecho lo mismo. En otro programa tenia una clase X que heredaba de Activity en una parte del programa creaba un dialog donde habia un web que pulsando en ella me iba a la página. Ahora no me funciona. Adjunto también el Manifest.

Muchas gracias, un saludo.


public class PruebaMapa extends MapActivity {
/** Called when the activity is first created. */
private List<Sitio> listaDeSitios;
private List<Overlay> mapOverlays;
private Drawable drawable;
private GeoPoint point;
private OverlayItem item;
private HelloItemizedOverlay itemOverlay;
private Dialog dialog;
private TextView txtCiudad,txtLink,txtProvincia;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MapView mapView = (MapView) findViewById(R.id.mapa);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.marcado r_google_maps);
}

public void onResume(){
..............
.....................
...................
}

private Dialog hacerDialogo(String nombre,String ciudad,String link, String provincia){
dialog = new Dialog(this);
dialog.setContentView(R.layout.dialogo);
dialog.setTitle(nombre);

txtCiudad = (TextView) dialog.findViewById(R.id.txtCiudad);
txtCiudad.setText(ciudad);

txtProvincia = (TextView) dialog.findViewById(R.id.txtProvincia);
txtProvincia.setText(provincia);

txtLink = (TextView) dialog.findViewById(R.id.txtLink);
txtLink.setText(link);
txtLink.setTextColor(Color.BLUE);
txtLink.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Uri uri = Uri.parse(txtLink.getText().toString().trim());
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(uri);
startActivity(i);
dialog.dismiss();
}
});
return dialog;
}
}



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mapas.Monchy"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="com.google.android.maps"/>
<activity
android:name=".PruebaMapa"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

</manifest>

monchyrcg
16/03/12, 09:58:11
Nadie me dice nada acerca de esto. Me he dado cuenta que la llamada al intent la hago dentro del view dialog tiene que ser ese el problema. Pero como lo añado al manifest. Alguna idea???

La cosa es que si llamo a un intento así de esta manera si me funciona:

Intent a = new Intent(this, otraClase.class) ;
startActivity(a) ;

OtraClase.class la declaro en el manifest.

En fin alguna idea. Muchas gracias

Enviado desde mi LG-P970 usando Tapatalk

kriogeN
16/03/12, 11:40:07
Como dices al principio, puede ser que el problema sea que usas un MapActivity en lugar de un Activity, las clases que heredan de Activity están pensadas para un cometido muy específico, así que redefinen cosas que con una Activity normal funcionaría pero en un subclase de esta no funciona al estar redefinido.

Por ejemplo yo he tenido muchos problemas con una ListActivity, así que decidí pasarme al método básico y definirme un ListView dentro del Activity y tratarlo a mano, puede que te esté ocurriendo lo mismo, intenta trabajar un MapView directamente sobre un Activity en lugar de usar un MapActivity.

monchyrcg
16/03/12, 13:14:05
Muchas gracias kriogeN pero no se puede crear un mapView en una Activity obligatoriamente ha de ser sobre un MapActivity!!!!

kriogeN
16/03/12, 13:26:39
Muchas gracias kriogeN pero no se puede crear un mapView en una Activity obligatoriamente ha de ser sobre un MapActivity!!!!

Es verdad, como nunca lo había usado no lo había visto, solo puede recibir un Inflate desde un MapActivity. Pues entonces no se cual puede ser el problema.

monchyrcg
17/03/12, 18:52:03
Joder seguro que es una tontería, AYUDARME PLEASE!!!!!!!!!!!!!

monchyrcg
19/03/12, 11:32:23
Pues si era una tontería y además bastante grande. Todo estaba bien, se puede llamar a la actividad desde el MapActivity sin problema.

Era yo, que no realizaba bien la llamada; el texto que cogía era el problema, la url estaba mal formada. En mi aplicación por estética aparecen las url sin el protocolo (sin el http://) por lo tanto la llamada al intent no estaba bien formado.

Al hacer:

Uri uri = Uri.parse(txtLink.getText().toString().trim());
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(uri);
startActivity(i);

Cuando añado los datos al intent no están bien formados. La solución muy fácil:

Uri uri = Uri.parse("http://"+txtLink.getText().toString().trim());
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(uri);
startActivity(i);


Gracias a todos, un saludo