Android ListView addHeaderView() nullPointerException 用于在 XML 中定义的预定义视图 [英] Android ListView addHeaderView() nullPointerException for predefined Views defined in XML

查看:22
本文介绍了Android ListView addHeaderView() nullPointerException 用于在 XML 中定义的预定义视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试将 addHeaderView()addFooterView() 用于 ListView.如果我尝试使用我在 XML 中为页眉或页脚预定义的视图,我会收到空​​指针异常.但是,如果我使用代码动态创建一个视图,它工作正常...

Trying to use addHeaderView() and addFooterView() for a ListView. If I try to use a View that I've predefined in XML for either the header or footer, I get a null pointer exception. However, if I dynamically create a View using code, it works fine...

// This doesn't work... nullPointerException
ListView lv = (ListView) findViewById(R.id.my_list_view);
TextView header = (TextView) findViewById(R.id.my_header);
lv.addHeaderView(header);

// This works fine
ListView lv = (ListView) findViewById(R.id.my_list_view);
TextView header = new TextView(this);
TextView.setHeight(30);
TextView.setText("my header text!");
lv.addHeaderView(header);

我的堆栈跟踪:

Caused by: java.lang.NullPointerException
    at android.widget.ListView.clearRecycledState(ListView.java:522)
    at android.widget.ListView.resetList(ListView.java:508)
    at android.widget.ListView.setAdapter(ListView.java:440)
    at com.company.myapp.MyActivity.refreshList(MyActivity.java:85)
    at com.company.myapp.MyActivity.onCreate(MyActivity.java:37)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    ... 11 more

有什么线索吗?

推荐答案

你根本做不到

View header = findViewById(R.layout.headerView);
lst.addHeaderView(header);

这将不起作用,因为在中传递的视图必须被膨胀.简而言之,当您在活动开始时执行 setContentViewandroid 框架会自动膨胀视图并使用.为了扩大你的标题视图,你所要做的就是

This will NOT work because the view which is being passed in has to be inflated. In a nutshell when you do setContentView at the beginning of your activity the android framework automatically inflates the view and puts it to use. In order to inflate your header view, all you have to do is

View header = (View)getLayoutInflater().inflate(R.layout.headerView,null);
ls.addHeaderView(header);

最后,在设置标题视图并运行应用程序后添加适配器.您应该会看到包含放入适配器中的内容的标题视图.

lastly, add your adapter after you’ve set the header view and run the application. You should see your header view with the content you put into your adapter.

就我而言,这是有效的

View header = getLayoutInflater().inflate(R.layout.header, null); 
View footer = getLayoutInflater().inflate(R.layout.footer, null); 

ListView listView = getListView();  

listView.addHeaderView(header); 
listView.addFooterView(footer);     

setListAdapter(new ArrayAdapter<String(this,android.R.layout.simple_list_item_single_choice,android.R.id.text1, names)); 

这篇关于Android ListView addHeaderView() nullPointerException 用于在 XML 中定义的预定义视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆