SetAdapter "La llamada requiere el nivel 11 de la API (el min actual es 8): android.widget.AbsListView # setAdapter"?
Estoy llamando al método setAdapter()
en una clase que extiende Fragment
. Tenga en cuenta que he importado android.support.v4.app.Fragment
.
Sin embargo, obtengo un error que indica que el nivel de API se requiere para ser el nivel 11.
- Cambio de orientación con viewPager dentro de FragmentActivity
- Seleccione la imagen de la galería en Android Fragment
- Cómo deshabilitar el toque en el área del fragmento
- Cardview dentro de la pestaña
- ¿OnDestroy () está garantizado para ser llamado Fragments?
¿Qué debo hacer para poder solucionarlo sin cambiar minSdkVersion="8"
a minSdkVersion="11"
package foo.bar.qux; import java.util.Calendar; import java.util.Date; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class TabFragmentList extends Fragment { String category, xml; NodeList nodes; int numResults; private ListView lv; Date date; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) return null; return (LinearLayout) inflater.inflate(R.layout.eventlist, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Activity activity = getActivity(); if (activity != null) { final Calendar c = Calendar.getInstance(); ListContent[] item = new ListContent[3]; category = (String) activity.getIntent().getExtras() .get("category"); xml = (String) activity.getIntent().getExtras().get("xml"); TextView tv = (TextView) getView().findViewById(R.id.category); tv.setText(category); nodes = doc.getElementsByTagName("event"); for (int i = 0; i < 3; i++) { c.add(Calendar.DATE, 1); date = c.getTime(); item[i] = new ListContent(); item[i].setList(nodes, category, date); } EventListAdapter adapter = new EventListAdapter(activity, R.layout.eventlist_row, item); lv = (ListView) getView().findViewById(R.id.listView1); lv.setAdapter(adapter); // ERROR SHOWN HERE } } }
Nota: He intentado reducir el targetSdkVersion a 10. Sin embargo, obtengo el error. ¡Por favor ayuda!
Edit: No entiendo por qué se denomina como AbsListVew
cuando todo lo que he utilizado es un ListView
. Además, tenga en cuenta que he utilizado un adaptador personalizado.
ArrayAdaptere<ListContent>
extiende ArrayAdaptere<ListContent>
y muestra NO ERROR.
Para su referencia aquí es el fragmento de código de diseño xml para R.id.ListView1
<ListView android:layout_margin="10dp" android:dividerHeight="10.0sp" android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="fill_parent" />
- Pestañas de Viewpager Fragmento y Fragmentos normales
- Android: añadir fragmento con dimensiones personalizadas
- NestedScrollView corta / superpone la parte inferior de Fragmentos anidados
- ¿Por qué usar Fragmentos?
- Cómo agregar un fragmento a una actividad con una vista de contenido creada mediante programación
- Nullpointer excepción en oncreateView () de fragmento
- Una Actividad y todos los otros Fragmentos
- RecyclerView con fragmentos
Right click on the project folder > Android tools > Clear Link Markers
"Run Android Lint" hace que algunos marcadores y los marcadores causen este error.
La solución es sólo el tipo de casting para corregir el subtipo, ya que las versiones posteriores introdujeron la llamada del método con el mismo nombre.
@SuppressWarnings({ "unchecked", "rawtypes" }) EventListAdapter adapter = new EventListAdapter(activity, R.layout.eventlist_row, item); lv = (ListView) getView().findViewById(R.id.listView1); ((AdapterView)lv).setAdapter(adapter); //ERROR SOLVED HERE
Como se puede ver en el setAdapter()
docs setAdapter()
en AbsListView
está disponible sólo desde el nivel 11 de la API. Así que no hay mucho que puedas hacer, puedes lanzar eventualmente tu AbsListView
a ListView
o GridView
y luego llamar a setAdapter()
.
He resuelto el "método abstracto no implementado error" mediante el casting mi método setAdapter como este:
@SuppressWarnings("unchecked") public void setAdapterSDK8(Adapter adapter) { ((AdapterView) this).setAdapter(adapter); ((StaggeredGridView) this).setAdapter((ListAdapter) adapter); }
Esto se relaciona con el gridview etsy escalonado
- ¿Puedo usar Cobertura en pruebas de unidad con PowerMock?
- Ajuste de los contenidos de la página web dentro de una vista web (Android)