Android ListView addHeaderView() nullPointerException 用于在 XML 中定义的预定义视图 [英] Android ListView addHeaderView() nullPointerException for predefined Views defined in 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);
这将不起作用,因为在中传递的视图必须被膨胀
.简而言之,当您在活动开始时执行 setContentView
时android 框架会自动膨胀视图并使用.为了扩大你的标题视图,你所要做的就是
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屋!