Reputation: 640
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" />
Upvotes: 20
Views: 37933
Reputation: 249
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
Upvotes: 0
Reputation: 25153
Right click on the project folder > Android tools > Clear Link Markers
"Run Android Lint" makes some markers and the markers cause this error.
Upvotes: 71
Reputation: 6373
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
Upvotes: 7
Reputation: 72331
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()
.
Upvotes: 0