1

我有一个显示数组列表内容的列表视图。我正在使用一个简单的适配器来使这成为可能。

public static ArrayList<String> homeScreenContacts = new ArrayList<String>();

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
                R.layout.home_screen_contacts_view, NewContact.homeScreenContacts);

第二行给了我一个空指针异常。我想了想,我认为这是因为 arrayList 是空的。所以我在 arraylist 声明和 arrayadaptor 声明之间添加了以下行...

NewContact.homeScreenContacts.add("A Contact");

这解决了问题,我的代码运行良好,但现在列表视图显示“A Contact”,我不希望这样。有没有办法摆脱空指针异常问题,但数组列表仍然为空?因为我想用用户制作的联系人填充它,而不是硬编码的随机字符串。谢谢你。

编辑:对不起,arraylist 位于另一个名为 NewContact 的类中,另外,我是刚开始的 Android 程序员。

4

3 回答 3

2

简单的解决方案只是不初始化ListViewif 中没有元素ArrayListArrayListis 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,则不要初始化ListViewand 在列表视图上的任何操作之前您应该检查它是否为空。

正如您所说,您希望在用户在应用程序中添加一些联系人时填充,然后在添加事件时只需要填充或更新ListAdapter.

希望此解决方案能解决您的问题。

于 2013-09-17T04:45:15.670 回答
0

对我来说很好:

if(arrayList.isEmpty())
{

        listView.setAdapter(null);
}
else
{
        listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);
        listView.setAdapter(listAdapter);
}
于 2013-09-17T05:03:39.453 回答
0

试试这个代码

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); 
        }
    }
于 2013-09-17T04:29:05.007 回答