2012-09-22 17 views
20

Llamo al método setAdapter() en una clase que se extiende Fragment. Tenga en cuenta que he importado android.support.v4.app.Fragment.setAdapter "La llamada requiere el nivel 11 de API (el mínimo actual es 8): android.widget.AbsListView # setAdapter"?

Sin embargo me sale un error que indica que el nivel de la API es necesaria para estar al mismo nivel 11.

¿Qué tengo que hacer para que pueda solucionar este problema 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 : Intenté reducir el targetSdkVersion a 10. Sin embargo, recibo el error. ¡Por favor ayuda!

Editar: No entiendo por qué se llama AbsListVew cuando todo lo que he usado es ListView. Además, tenga en cuenta que he usado un adaptador personalizado.

EventListAdapter extiende ArrayAdaptere<ListContent> y muestra SIN ERROR.

Para su referencia aquí es el diseño fragmento de código 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" /> 
+0

Hacer el apoyo seguro de que está extendiéndose fragmento ... solo elimine la importación y cámbiela –

Respuesta

71

Right click on the project folder > Android tools > Clear Link Markers

"Ejecutar Android Lint" hace algunos marcadores y los marcadores de producir este error.

+6

Y tuve que desmarcar "Al guardar archivos, compruebe si hay errores" en Preferencias> Android> Verificación de error de pelusa. – Felix

0

Como se puede ver en la documentación setAdapter() método de AbsListView está disponible sólo de nivel API 11. Así que hay ISN' Es mucho lo que puede hacer, simplemente puede enviar su AbsListView a ListView o GridView y luego llamar al setAdapter().

+0

He usado solo un 'ListView' en mi código. Solo que he personalizado mi 'Adaptador'. ¿Dónde está el error entonces? – Enigman

+0

publique un código y luego –

+0

@Ovidu: He publicado el código. ¿Podrías por favor verificar y decirme ahora? Gracias :) – Enigman

7

La solución es solo tipo de conversión para corregir el subtipo, ya que versiones posteriores de Android introdujeron la llamada al 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 
+0

No veo un bloqueo, explíquelo, su comentario no es útil de lo contrario ... Está realizando el preamplificador API 11 AdapterView, por lo que lo que hace aquí no tiene nada con la API más nueva, solo le está diciendo al compilador que use correctamente método que existe en pre API 11 ... – Renetik

+1

lo siento, probé su solución y tuve un "error de método abstracto no implementado". Sin embargo, he encontrado una solución para mi problema. en retrospectiva, la solución podría funcionar, fue mi implementación la que no se ejecutó bien. Eliminaré mi respuesta más tarde ya que no era relevante –

0

que resolvió el "método abstracto no implementado error" echando mi método setAdapter así:

@SuppressWarnings("unchecked") 
public void setAdapterSDK8(Adapter adapter) { 
    ((AdapterView) this).setAdapter(adapter); 
    ((StaggeredGridView) this).setAdapter((ListAdapter) adapter); 
} 

Esto se relaciona con la etsy escalonados gridview

Cuestiones relacionadas