Android的ListView的addHeaderView()NullPointerException异常在XML中定义predefined浏览 [英] Android ListView addHeaderView() nullPointerException for predefined Views defined in XML

查看:145
本文介绍了Android的ListView的addHeaderView()NullPointerException异常在XML中定义predefined浏览的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用 addHeaderView() addFooterView()的ListView 。如果我尝试使用一种观点认为,我已经pdefined在XML中的页眉或页脚$ P $,我得到一个空指针异常。不过,如果我使用code动态地创建一个视图,它工作得很好...

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

我的堆栈跟踪:

My stack trace:

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.

在我的情况下,这个工程

In my case, this works

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中定义predefined浏览的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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