尝试将 HeaderView 添加到 android 中的 ListView 但我无法添加
Trying to add a HeaderView to ListView in android But I cant add
在我的 activity 中,我有一个 ListView。
因为我正在尝试将 header 视图添加到列表视图中,这对我来说似乎不起作用。
当我使用 addHeaderView()
方法添加 header 视图时,它抛出
java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called
当我注释掉 listView.addHeaderView(header);
时,它工作正常。
但是我在 setAdapter()
方法之前调用了 addHeaderview()
方法。我无法弄清楚为什么会发生此错误。让我知道我的代码中有什么错误。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
TextView header= new TextView(this);
header.setText("Header");
ListView listView = (ListView)findViewById(R.id.list_view);
listView.addHeaderView(header);
List<String> list = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
list.add("Row "+i);
}
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));
这样试试:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
TextView header= new TextView(this);
header.setText("Header");
ListView listView = (ListView)findViewById(R.id.list_view);
listView.addHeaderView(header);
List<String> list = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
list.add("Row "+i);
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
伙计们,我明白了。我在 xml 文件中添加了 android:entries
属性。因此 setAdapter()
在 addHeaderView()
方法之前调用。
<ListView
android:id="@+id/confess_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/sample_array"
android:padding="@dimen/medium"
android:layout_margin="@dimen/medium"
android:background="#fbf8f8"
android:scrollbars="none">
</ListView>
当我从 xml 中删除 android:entries
属性时,它工作正常。谢谢@Bhavik Mehta。
它对我来说是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list_id);
//code to add header and footer to listview
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header, listView,
false);
ViewGroup footer = (ViewGroup) inflater.inflate(R.layout.footer, listView,
false);
listView.addHeaderView(header, null, false);
listView.addFooterView(footer, null, false);
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, numbers);
listView.setAdapter(adapter);
}
在我的 activity 中,我有一个 ListView。
因为我正在尝试将 header 视图添加到列表视图中,这对我来说似乎不起作用。
当我使用 addHeaderView()
方法添加 header 视图时,它抛出
java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called
当我注释掉 listView.addHeaderView(header);
时,它工作正常。
但是我在 setAdapter()
方法之前调用了 addHeaderview()
方法。我无法弄清楚为什么会发生此错误。让我知道我的代码中有什么错误。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
TextView header= new TextView(this);
header.setText("Header");
ListView listView = (ListView)findViewById(R.id.list_view);
listView.addHeaderView(header);
List<String> list = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
list.add("Row "+i);
}
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));
这样试试:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
TextView header= new TextView(this);
header.setText("Header");
ListView listView = (ListView)findViewById(R.id.list_view);
listView.addHeaderView(header);
List<String> list = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
list.add("Row "+i);
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
伙计们,我明白了。我在 xml 文件中添加了 android:entries
属性。因此 setAdapter()
在 addHeaderView()
方法之前调用。
<ListView
android:id="@+id/confess_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/sample_array"
android:padding="@dimen/medium"
android:layout_margin="@dimen/medium"
android:background="#fbf8f8"
android:scrollbars="none">
</ListView>
当我从 xml 中删除 android:entries
属性时,它工作正常。谢谢@Bhavik Mehta。
它对我来说是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list_id);
//code to add header and footer to listview
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header, listView,
false);
ViewGroup footer = (ViewGroup) inflater.inflate(R.layout.footer, listView,
false);
listView.addHeaderView(header, null, false);
listView.addFooterView(footer, null, false);
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, numbers);
listView.setAdapter(adapter);
}