2012-09-22 13 views
20

Sto chiamando il metodo setAdapter() in una classe che estende Fragment. Nota che ho importato android.support.v4.app.Fragment.setAdapter "La chiamata richiede il livello API 11 (min corrente è 8): android.widget.AbsListView # setAdapter"?

Tuttavia ottengo un errore che indica che il livello di API è necessario essere di livello 11.

Che cosa devo fare in modo che possa risolvere il problema senza cambiare 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 : Ho provato a ridurre il targetSdkVersion a 10. Eppure ottengo l'errore. Per favore aiuto!

Modifica: non capisco perché è definito come AbsListVew quando tutto ciò che ho usato è un ListView. Inoltre, tieni presente che ho utilizzato un adattatore personalizzato.

EventListAdapter estende ArrayAdaptere<ListContent> e non mostra ERRORE.

Per il vostro riferimento qui è il codice del layout XML snippet 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

Assicurarsi supporto che si sta estendendo frammento ... basta rimuovere l'importazione e cambiarla. –

risposta

71

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

"Run Android Lint" fa alcuni marcatori ei marcatori causare questo errore.

+6

E ho dovuto deselezionare "Quando si salvano i file, verificare la presenza di errori" in Preferenze> Android> Controllo errori filaccia. – Felix

0

Come si può vedere nella documentazione setAdapter() metodo su AbsListView è disponibile solo dal livello di API 11. Quindi là isn' Per quanto tu possa fare, puoi semplicemente trasmettere il tuo a ListView o GridView e poi chiamare setAdapter().

+0

Ho usato solo un 'ListView' nel mio codice. Solo che ho personalizzato il mio 'Adattatore'. Dov'è l'errore allora? – Enigman

+0

inserisci un codice quindi –

+0

@Ovidu: ho pubblicato il codice. Potresti controllare e dirmelo ora? Grazie :) – Enigman

7

La soluzione è solo un tipo di trasmissione per correggere il sottotipo poiché in seguito le versioni di Android hanno introdotto la chiamata al metodo con lo stesso nome.

@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

Non vedo un arresto anomalo, spiega, il tuo commento non è utile altrimenti ... Stai eseguendo il casting su pre API 11 AdapterView quindi quello che fai qui non ha nulla con l'API più recente, stai solo dicendo al compilatore di usare correttamente metodo che esiste in pre API 11 ... – Renetik

+1

scusate, ho testato la vostra soluzione e ho avuto un "metodo astratto non implementato errore". Ho comunque trovato una soluzione alternativa per il mio problema. con il senno di poi la soluzione potrebbe funzionare, è stata la mia implementazione che non è stata eseguita bene. Cancellerò la mia risposta più tardi poiché non era pertinente –

0

ho risolto il "metodo astratto non implementato errore" lanciando il mio metodo setAdapter in questo modo:

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

Questo è legato al etsy sfalsati GridView

Problemi correlati