ArrayList for ListView 上的 Android 空指针异常



我有一个列表视图,显示数组列表的内容。我正在使用一个简单的适配器来实现这一点。

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

最新更新