不能添加标题视图列表 – setAdapter已被调用

我有一个edittext字段和一个“search”button。 当我点击search时,我必须显示一个列表视图,其中的数据对应于在edittext中input的值。 我已经使用addHeader()将头添加到我的列表中。 当我第一次search的时候,我能够成功地在列表中显示数据。 但是当我再次search时,我得到了下面的错误。

FATAL EXCEPTION: main java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. at android.widget.ListView.addHeaderView(ListView.java:261) at android.widget.ListView.addHeaderView(ListView.java:284) 

在设置适配器之前,我已将标题分配给我的列表。

以下是我的代码:

 myList = (ListView) findViewById(R.id.searchResultsList); View header = View.inflate(this, R.layout.search_results_header, null); myList.addHeaderView(header, null, false); dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults); myList.setAdapter(dataAdapter); 

我在哪里做错了?

Solutions Collecting From Web of "不能添加标题视图列表 – setAdapter已被调用"

在android 2.3上,在setAdapter之后添加头文件(即使你已经添加了,然后删除)会抛出一个exception。 要dynamic地隐藏或显示标题,请使用setVisibility()。 怎么样? 您可以看到隐藏标题视图 。

不能添加标题视图列表 – setAdapter已经被调用。 你可以看到,myList.addHeaderView(header)必须在myList.setAdapter(adapter)之前执行;

尝试这个..

 dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults); myList.addHeaderView(header); myList.setAdapter(dataAdapter); dataAdapter.notifyDataSetChanged(); 

今天我也有同样的问题。 我有多个ListViews。从第一个信息,它build立下一个列表,每个人都有setAdapter在其中。 对我来说,最好的解决办法就是放

 setListAdapter(null); 

在函数顶部,我膨胀标题。 我希望这有帮助..

如果您在xml文件中使用了ListView中的android:entries ,则在setAdapter()之前调用setAdapter()方法。 所以从xml布局文件中的ListView中删除android:entries属性。 这将是工作。

您可以在设置适配器之前添加FrameLayout作为标题视图,并在FrameLaypout中dynamic添加/删除视图

我定了之后

 final ViewGroup header = (ViewGroup) inflater.inflate(R.layout.item, listView, false); listView.addHeaderView(header, null, true); 

之前

 listView.setAdapter(adapter); 

还是出现了一个问题。 然后我做了Build> Clean Project。

经过这么多的努力,我得到了解决scheme,我希望这可以帮助别人

我已经设置adpater在最后(视图添加后),但不知道为什么我从同样的错误,所以在这里我做了这样的代码

 // Set View here View view = getLayoutInflater().inflate(R.layout.navigation_header,null); mDrawerList.addHeaderView(view); // init your adapter adapter1 = new YourListAdapter(getApplicationContext(),blabla); // set adapter into handler Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub mDrawerList.setAdapter(adapter1); } }, 100); 

我把我的适配器进行处理的时候,它发生了适配器设置更快,然后查看,所以这段代码足以解决这个exception。 🙂

我在示例应用程序中使用了以下代码来设置ListView标头:

  ListView lv=getListView(); View headerView=getLayoutInflater().inflate(R.layout.layout_header, null,false); lv.addHeaderView(headerView); final TumblrDB db=new TumblrDB(this); c=db.query(); startManagingCursor(c); adapter=new CustomCursorAdapter(this,R.layout.layout_del,c,new String[]{TumblrDB.DATE,TumblrDB.DESC},new int[]{R.id.txt_a,R.id.txt_b}); lv.setAdapter(adapter);