setAdapter "Call requires API level 11 (current min is 8): android.widget.AbsListView#setAdapter"?-ThrowExceptions

Exception or error:

I’m calling the setAdapter() method in a class that extends Fragment. Note that I have imported android.support.v4.app.Fragment .

However I get an error stating that the API level is required to be level 11.

What do I have to do so that I can fix this without changing minSdkVersion="8" to 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
        }
    }
}

Note : I tried reducing the targetSdkVersion to 10. Yet I get the error. Please help!

Edit : I don’t understand why it’s termed as AbsListVew when all that I have used is a ListView. Also, note that I’ve used a custom adapter.

EventListAdapter extends ArrayAdaptere<ListContent> and shows NO ERROR.

For your reference here is the xml layout code snippet for 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" />
How to solve:

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

“Run Android Lint” makes some markers and the markers cause this error.

###

Solution is just casting type to correct subtype as later Android versions introduced method call with same name.

@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

###

As you can see in the docs setAdapter() method on AbsListView is available just from API Level 11. So there isn’t much you can do, you can just cast eventually your AbsListView to a ListView or GridView and then call setAdapter().

###

I solved the “abstract method not implemented error” by casting my setAdapter method like this:

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

This is related to the etsy staggered gridview

Leave a Reply

Your email address will not be published. Required fields are marked *