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" /> 

  • 在Viewpager中映射v2 SupportMapFragment
  • 如何在Google Maps Android API v2中向MapFragment添加自定义控件?
  • popup片段时,Android操作栏项保持不变
  • android.view.InflateException:二进制XML文件行#33:错误膨胀类
  • 支持库从23.1.1升级到25.1.0后,popBackStack()行为会有所不同
  • 从片段内部获取父ViewPager视图
  • Android导航栏涵盖了viewpager内容
  • 如何刷新button点击片段标签内容
  • 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有关