不能头视图添加到列表 - setAdapter已经被称为

问题描述 投票:20回答:10

我有一个外地的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 listview adapter
10个回答
25
投票

在Android 2.3,加入setAdapter(即使你已经早。接着,添加删除)后,头会抛出异常。要隐藏或动态显示的报头,使用setVisibility()。怎么样?你可以看到Hiding header views


-2
投票

我用下面的代码在我的示例应用程序设置一个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);

12
投票

不能头视图添加到列表 - setAdapter已经被调用。你可以看到,myList.addHeaderView(头)必须myList.setAdapter(适配器)之前执行;


1
投票

尝试这个..

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

1
投票

你可以设置适配器之前添加的FrameLayout作为头图和动态添加/删除FrameLaypout视图


1
投票

今天我有同样的问题。我有多个列表视图。随着从第一个信息,它建立下一个列表,每个人都有setAdapter在里面。对我来说,最好的解决办法是把

setListAdapter(null);

在功能上,在那里我充气头的顶部上。我希望这有帮助..


1
投票

如果你在ListView控件在XML文件中使用android:entries,其addHeaderView之前调用setAdapter()方法。所以从ListView控件在XML布局文件中删除android:entriesattribute。这将是工作。



0
投票

之后我设置

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

之前

listView.setAdapter(adapter);

一个问题仍然出现了。这时我犯了构建>清理项目。


-1
投票

经历了这么多努力,我得到了我身边的解决方案我希望这可以帮助别人太

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

// 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);

我把我的适配器来处理某个时候它发生适配器设置快于视图,以便该代码足以让我解决了这个例外。 :)

© www.soinside.com 2019 - 2024. All rights reserved.