setAdapter“调用需要API级别11(当前最less8):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.但是我得到了这个错误。 请帮忙!

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

EventListAdapter扩展了ArrayAdaptere<ListContent>并显示NO ERROR。

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

 <ListView android:layout_margin="10dp" android:dividerHeight="10.0sp" android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

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

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

“运行Android Lint”会生成一些标记,标记会导致此错误。

解决scheme只是铸造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有关