【问题标题】:Trying to add a HeaderView to ListView in android But I cant add试图在 android 中将 HeaderView 添加到 ListView 但我无法添加
【发布时间】:2015-04-06 07:49:58
【问题描述】:

在我的活动中,我有一个 ListView。 在那我试图将标题视图添加到列表视图看起来对我不起作用。 当我使用addHeaderView() 方法添加标题视图时,它会抛出

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

【问题讨论】:

  • 我认为您在设置标题之前在代码中的某处执行 setAdapter,如果可能,请发布整个课程
  • 这是我在 onCreate() 方法@BhavikMehta 中的完整代码。

标签: android listview android-activity header oncreate


【解决方案1】:

我明白了,伙计们。我在 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。

【讨论】:

  • 很高兴,我可以帮忙:)
【解决方案2】:

试试这样:

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

【讨论】:

  • Thanx @Ravi Dev ,我发现我错了。已发布答案。
【解决方案3】:

这样对我有用:

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

}

【讨论】:

  • Thanx @Nikhil Verma ,我发现我错了。已发布答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多