我有一个列表视图,显示数组列表的内容。我正在使用一个简单的适配器来实现这一点。
public static ArrayList<String> homeScreenContacts = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.home_screen_contacts_view, NewContact.homeScreenContacts);
第二行给了我一个空指针异常。我想了想,我决定这是因为数组列表是空的。所以我在数组列表声明和数组适配器声明之间添加了以下行......
NewContact.homeScreenContacts.add("A Contact");
这解决了问题,我的代码工作正常,但现在列表视图显示"联系人",我不希望它。有没有办法摆脱空指针异常问题,但仍然有数组列表为空?因为我想用用户制作的联系人填充它,而不是硬编码的随机字符串。谢谢。
编辑:抱歉,数组列表位于另一个名为NewContact的类中,另外,我是非常初学者的Android程序员,我刚刚开始。
简单的解决方案只是不初始化ListView
如果ArrayList
中没有元素或ArrayList
为 null。
if(NewContact.homeScreenContacts != null && NewContact.homeScreenContacts.size() > 0){
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.home_screen_contacts_view, NewContact.homeScreenContacts);
listView.setAdapter(adapter);
}
您还需要记住,如果您尚未初始化Adapter
则不要初始化ListView
,并且在对列表视图进行任何操作之前,您应该检查它是否为 null。
正如您所说,当用户在应用程序中添加一些联系人时,您希望填充,然后在添加事件中,您只需要填充或更新ListAdapter
。
希望此解决方案可以解决您的问题。
试试这段代码
public class YourActivity extends Activity
{
private ListView lv;
public void onCreate(Bundle saveInstanceState) {
setContentView(R.layout.your_layout);
lv = (ListView) findViewById(R.id.your_list_view_id);
// Instanciating an array list (you don't need to do this, you already have yours)
ArrayList<String> your_array_list = new ArrayList<String>();
your_array_list.add("foo");
your_array_list.add("bar");
// This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, your_array_list);
lv.setAdapter(arrayAdapter);
}
}
效果很好:
if(arrayList.isEmpty())
{
listView.setAdapter(null);
}
else
{
listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);
listView.setAdapter(listAdapter);
}