2013-08-18 3 views
0

Я пытаюсь установить ListView, и я смог сделать это, используя простой массив String [], как вы можете видеть в коде.Проблемы с ListView, используя список вместо массива

Позже я закомментирована массива и использовать список

Моя проблема начинается, когда я хочу использовать список (так как мне нужно, чтобы управлять содержимым) и простой массив не может динамически изменяться. Когда я использую List, я получаю исключение NullPointerException, когда создаю ArrayAdapter, и я не знаю почему.

Я прочитал в документации ArrayAdapter, что она перегружена с 6 различными конструкторами и один из них является

ArrayAdapter (Context контекст, внутр ресурс, Список объектов)

Почему я получаю NullPointerException ?

Что мне делать, чтобы заставить его работать со списком вместо массива?

Заранее благодарен!

public class MainActivity extends Activity implements OnItemClickListener { 

ListView l; 

// String[] days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; 

List<String> days; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     days.add(0, "Sunday"); 
     days.add(1, "Monday"); 
     days.add(2, "Tuesday"); 
     days.add(3, "Wednesday"); 
     days.add(4, "Thursday"); 
     days.add(5, "Friday"); 
     days.add(6, "Saturday"); 


     l = (ListView) findViewById(R.id.listView1); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, days); 
     l.setAdapter(adapter); 
     l.setOnItemClickListener(this); 

    } 

    @Override 
    public void onItemClick(
      AdapterView<?> adapterView, // ListView that was clicked 
      View view, // Reference to the row that was clicked (each row is a TextView) 
      int i, // position 
      long l) { // id of the TextView that was clicked 

     Toast.makeText(this, days.get(i) + " " + i, Toast.LENGTH_LONG).show(); 
    } 

} 

ответ

2

Вы забыли инициализацию days поле с чем-либо, так что остается нулевым при вызове метода add. Перед days.add(0, "Sunday"); линии, добавьте это:

days = new ArrayList<String>(); 

Кроме того, вынимают номера индексов. Просто используйте days.add("Sunday"); days.add("Monday"); и так далее.

+0

Это сделало, спасибо! – user2566468

+0

Крис, о том, что я не использую номера индексов, на самом деле я использую две разные коллекции в своем приложении, и они ссылаются на каждый номер, используя номер индекса. Если я использую ArrayList, это гарантировано (если я не использую индексный номер), что они будут находиться в одной позиции? Другими словами: гарантировано ли, что индекс будет таким же, как и порядок, который был введен в список? – user2566468

+0

Да, 'add' без индекса всегда будет добавляться в конец списка. –

1

Вам нужно создать days:

List<String> days = new ArrayList<String>(); 

, например.