¿Cómo podría agregar enlaces clicables dentro de un ListView?Android: ¿Cómo puedo agregar enlaces HTML dentro de un ListView?
Respuesta
Esto se hace mediante el atributo autoLink de un TextView. Me llevó algo de tiempo hurgar en la documentación para ponerla aquí con un ejemplo en caso de que alguien más la esté buscando:
Supongamos que está vinculando su vista de lista a un adaptador personalizado. En ese caso, el siguiente fragmento de código entra en su llamada getView:
Código:
textcontent.setText(Html.fromHtml(item.get_text()));
textcontent.setAutoLinkMask(Linkify.WEB_URLS);
Sólo hay que poner el enlace dentro del texto que se pasa a la llamada setText y ya está.
XML:
<TextView
android:id="@+id/txtview"
android:autoLink="web"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="put your link here"/>
Espero que ayude ...
Si tiene texto que ya está en formato HTML, lo mejor que puede hacer es la siguiente:
TextView textcontent = (TextView) findViewById(...);
textcontent.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href="http://www.stackoverflow.com">stackoverflow.com</a>";
textcontent.setText(Html.fromHtml(text));
Esto hará que cualquier etiqueta de enlace pueda hacer clic en su vista de texto. Alternativamente, podría usar android:autoLink="web"
según lo sugerido por Legend, pero esto tiene el efecto secundario de a) vincular URLs que no están envueltas en etiquetas de anclaje, yb) potencialmente faltan urls o enlaces de cosas que no son urls. Si desea la inteligencia de autoLink, entonces debe usarla, pero si todo lo que quiere es vincular las etiquetas que ya están allí, es mejor que use setMovementMethod()
.
ver este informe de error para más detalles: http://code.google.com/p/android/issues/detail?id=2219
Gracias, funcionó muy bien. –
Hmm, parece que agregar textcontent.setMovementMethod (LinkMovementMethod.getInstance()); hace que los clics en las partes de texto de la vista de texto ya no se transmitan a la vista de lista a continuación. –
Esta es la respuesta más correcta a la pregunta. Las respuestas de BeerMe corrigen los problemas con el elemento ListView que no se puede cliquear. – juil
Hmm, parece que la adición de textcontent.setMovementMethod (LinkMovementMethod.getInstance()); hace que los clics en las partes de texto de la vista de texto ya no se transmitan a la vista de lista a continuación.
encontré una solución simple bajo Issue 3414, Comment 27:
Una manera fácil de solucionar este problema es llamar "setDescendantFocusability (FOCUS_BLOCK_DESCENDANTS);" en la lista Vea las vistas a medida que se agregan. Podrá seleccionar filas, hacer clic en las filas y hacer clic en las casillas y botones secundarios.
funcionó perfectamente para mí, aunque no se requiere algo de calidad:
View v;
((ViewGroup)v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
¿Dónde se agrega el desecamiento? ¿A ListView o al ListItem? Seguí tu ejemplo para agregar enlaces clicables, sin embargo, al hacer clic en partes no vinculadas de mi vista de texto, el evento no se pasa a la vista principal del elemento de lista o a la vista de lista ... – ffleandro
Lo uso así: público Ver getView (int position, View convertView, ViewGroup parent) { Ver v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate (itemLayout, null); } ... ((ViewGroup) v) .setDescendantFocusability (ViewGroup.FOCUS_BLOCK_DESCENDANTS); return v; } No he comprobado para ver qué sucede con el evento si se hace clic en una parte que no sea de enlace. (No estoy seguro de por qué no puedo obtener el código para formatear ... lo siento). –
Es necesario configurar un setOnItemClickListener función() y en su interior declarar algo como esto:
Uri uri = Uri.parse("http://www.google.com");
startActivity(new Intent(Intent.ACTION_VIEW, uri));
El ¡La parte difícil de la vista de lista no es nada dentro (por ejemplo, una Vista de texto de un botón) se puede hacer clic!
Básicamente se necesitan dos matrices de cadenas:
- nombres que los usuarios ven en la list_view;
- hipervínculos a los que desea dirigirlos.
En el array.xml:
<string-array name="search_provider_name_array">
<item>Google</item>
<item>Yahoo</item>
<item>Bing</item>
<item>Baidu</item>
</string-array>
<string-array name="search_provider_link_array">
<item>https://www.google.com</item>
<item>https://www.yahoo.com</item>
<item>https://www.bing.com</item>
<item>https://www.baidu.com</item>
</string-array>
En el layout_search_provider.xml que contiene una vista de lista:
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv_search"
android:dividerHeight="1dp"/>
En su actividad:
public class SearchProvider implements AdapterView.OnItemClickListener {
private ListView lv_search;
private String[] names = getResources().getStringArray(R.array.search_provider_name_array);
private String[] links = getResources().getStringArray(R.array.search_provider_link_array);
//..
@Override
public View onCreateView(View v, String name, Context context, AttributeSet attrs) {
lv_search= (ListView) v.findViewById(R.id.lv_search);
ArrayAdapter sAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, names);
lv_search.setAdapter(sAdapter);
lv_search.setOnItemClickListener(this);
return v;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(i<links.length){
Uri uri = Uri.parse(links[i]);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
}
Cuando su la lista es dinámica, puede usar los siguientes métodos para actualizar su lista de la lista.
- mueve el código en onCreateView() a onResume().
- sAdapter.notifyDataSetChanged();
- 1. Android Mostrar HTML en un ListView
- 2. ListView dentro de otra ListView
- 3. ¿Cómo puedo hacer enlaces desdeHTML clickeable? (Android)
- 4. ListView dentro de un ScrollView
- 5. Agregar un GridView a un ListView en Android
- 6. ¿Cómo puedo agregar un salto de línea o html dentro de un Panel?
- 7. Android - MapView contenida dentro de una Listview
- 8. ¿Puedo mostrar enlaces en el modo detallado de ListView?
- 9. ViewPager dentro de ListView
- 10. Android ListActivity: cómo agregar una vista debajo de ListView?
- 11. ¿Cómo puedo establecer drawable a un ListView en Android
- 12. ¿Se pueden agregar enlaces de estilo HTML a SWT StyledText?
- 13. ¿Cómo insertar un objeto SVG en HTML con enlaces?
- 14. ¿Cómo puedo comentar líneas PHP dentro de un archivo HTML?
- 15. ¿Agregar elementos a un ListView?
- 16. Android: cómo ocultar un elemento de ListView
- 17. Cómo centrar enlaces en HTML
- 18. Complemento de Galleria: ¿cómo agregar enlaces?
- 19. Android. RadioButtons en un ListView
- 20. ¿Cómo puedo obtener enlaces href desde HTML usando Python?
- 21. ListView y botones dentro de ListView
- 22. Cómo puedo agregar borde a ListViewItem, ListView en modo GridView
- 23. Enlaces de MVVMCross en Android
- 24. Cómo agregar un atributo HTML con jQuery
- 25. Cómo agregar varios encabezados en un solo ListView con addHeaderView()?
- 26. ¿Cómo puedo desactivar el overcrolling de ListView en Android 2.2?
- 27. Seleccionar todos los elementos dentro de ListView
- 28. Cómo agregar enlaces en google chart api
- 29. Cómo obtener enlaces RTSP Android
- 30. Desplazamiento vertical de Android para ListView dentro Desplazamiento horizontalView
En realidad, esto no funcionó para mí: los enlaces individuales no se podían cliquear en los elementos que están en ListView, pero la solución de emmby funcionó muy bien. –
Gracias muchísimo, ayudado con mi ListView. – rwarner