Android: ¿Cómo puedo añadir enlaces HTML dentro de un ListView?
¿Cómo puedo ir sobre la adición de enlaces clicables dentro de un ListView?
- Fuente personalizada en android ListView
- Android: ¿Cómo puedo comprobar un elemento en particular en CheckView ListView?
- Android: establece el elemento de vista de lista como "seleccionado" (resaltado)
- El elemento ListView no permanecerá "seleccionado"
- ArrayIndexOutOfBoundsException con Adaptador Android personalizado para varias vistas en ListView
- Android: el método i (String, String) no está definido para el tipo Log
- Android, ListView IllegalStateException: "El contenido del adaptador ha cambiado pero ListView no recibió una notificación"
- Cambiar las teclas de función de fondo de negro a transparente en la aplicación android
- Problema al usar una fuente personalizada - "no se puede hacer el tipo de letra nativo"
- Recurso para Android Slight Izquierda / Derecha Acción de diapositiva en listview
- Lista de desplazamiento horizontal de Android
- Convertir elementos de vista de lista en una sola imagen de mapa de bits
- ListView desplazamiento de fondo con datos
Esto se hace usando el atributo autoLink de un TextView. Me llevó un poco de tiempo para cavar a través de la documentación para ponerlo aquí con un ejemplo en caso de que alguien lo está buscando:
Supongamos que vincula su listview 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 tiene 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 lo 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 las etiquetas de enlace puedan hacer clic en su vista de texto. Alternativamente, puedes usar android:autoLink="web"
como lo sugiere Legend, pero esto tiene el efecto secundario de a) las urls de enlace que no están envueltas en las etiquetas de anclaje, yb) potencialmente las urls que faltan o enlazando cosas que no son Urls Si quieres el smarts de autoLink entonces debes usarlo, pero si todo lo que quieres es vincular las etiquetas que ya están ahí, es mejor usar setMovementMethod()
.
Consulta este informe de errores para obtener más información: http://code.google.com/p/android/issues/detail?id=2219
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 pasen a la vista de lista a continuación.
Encontré una solución simple bajo el problema 3414, comentario 27 :
Una manera fácil de evitar este problema es llamar "setDescendantFocusability (FOCUS_BLOCK_DESCENDANTS)"; En las vistas listView a medida que se agregan. Podrá seleccionar filas, hacer clic en las filas y hacer clic en las casillas de verificación y los botones secundarios.
Funcionó perfectamente para mí, aunque se requería un casting:
View v; ((ViewGroup)v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
Es necesario establecer una función setOnItemClickListener () y en su interior declarar algo como esto:
Uri uri = Uri.parse( "http://www.google.com" ); startActivity( new Intent( Intent.ACTION_VIEW, uri ) );
La parte difícil de listview no es nada dentro (por ejemplo, un TextView de un botón) es clicable!
Básicamente se necesitan dos conjuntos de cadenas:
- Nombres que los usuarios ven en el list_view;
- Hipervínculos que desea dirigir a ir.
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 layout_search_provider.xml 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 la lista es dinámica, puede realizar los siguientes métodos para actualizar su lista.
- Mueva el código en onCreateView () en onResume ().
- SAdapter.notifyDataSetChanged ();