我有一个外地的EditText和一个“搜索”按钮。当我点击搜索,我要显示与对应于EditText上输入的值数据的列表视图。我一直在使用添加的addHeader头到我的清单()。当我做搜索第一次,我能够在列表成功地显示数据。但是,当我再次搜索,我得到下面的错误。
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);
我哪里做错了吗?
在Android 2.3,加入setAdapter(即使你已经早。接着,添加删除)后,头会抛出异常。要隐藏或动态显示的报头,使用setVisibility()。怎么样?你可以看到Hiding header views。
我用下面的代码在我的示例应用程序设置一个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);
不能头视图添加到列表 - setAdapter已经被调用。你可以看到,myList.addHeaderView(头)必须myList.setAdapter(适配器)之前执行;
尝试这个..
dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults);
myList.addHeaderView(header);
myList.setAdapter(dataAdapter);
dataAdapter.notifyDataSetChanged();
你可以设置适配器之前添加的FrameLayout作为头图和动态添加/删除FrameLaypout视图
今天我有同样的问题。我有多个列表视图。随着从第一个信息,它建立下一个列表,每个人都有setAdapter在里面。对我来说,最好的解决办法是把
setListAdapter(null);
在功能上,在那里我充气头的顶部上。我希望这有帮助..
如果你在ListView控件在XML文件中使用android:entries
,其addHeaderView之前调用setAdapter()
方法。所以从ListView控件在XML布局文件中删除android:entries
attribute。这将是工作。
唯一的例外是由Android的API。有关API级别低于奇巧的抛出的addHeader()或addFooter()方法必须前setAdapter()方法被调用。
它的API文档中提到:
之后我设置
final ViewGroup header = (ViewGroup) inflater.inflate(R.layout.item, listView, false);
listView.addHeaderView(header, null, true);
之前
listView.setAdapter(adapter);
一个问题仍然出现了。这时我犯了构建>清理项目。
经历了这么多努力,我得到了我身边的解决方案我希望这可以帮助别人太
我已经在最后设置适配器(视图中添加后),但不知道为什么我被同样的错误,所以在这里我做了这样的代码患
// 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);
我把我的适配器来处理某个时候它发生适配器设置快于视图,以便该代码足以让我解决了这个例外。 :)