setAdapter“调用需要API级别11(当前最小值为8):android.widget.AbsListView #setAdapter”?

我在扩展Fragment的类中调用setAdapter()方法。 请注意,我已导入android.support.v4.app.Fragment

但是我收到一个错误,指出API级别必须是11级。

我该怎么办才能解决这个问题,而不minSdkVersion="8"更改为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 } } } 

注意:我尝试将targetSdkVersion减少到10.但是我得到了错误。 请帮忙!

编辑:当我使用的所有内容都是ListView时,我不明白为什么它被称为AbsListVew 。 另外,请注意我使用了自定义适配器。

EventListAdapter扩展了ArrayAdaptere并显示NO ERROR。

这里是R.id.ListView1的xml布局代码片段供您参考

  

Solutions Collecting From Web of "setAdapter“调用需要API级别11(当前最小值为8):android.widget.AbsListView #setAdapter”?"

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

“运行Android Lint”会使一些标记和标记导致此错误。

解决方案只是转换types以更正子types,因为后来Android版本引入了具有相同名称的方法调用。

 @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 

正如您在文档中看到的那样, setAdapter()方法仅在API Level 11中可用。因此您无法做很多事情,您最终可以将AbsListView转换为ListViewGridView ,然后调用setAdapter()

我通过像这样强制转换setAdapter方法解决了“抽象方法未实现错误”:

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

这与etsy交错的gridview有关