2013-04-03 7 views
0

Я хочу добавить элемент в свой ListView. Я попытался с myAdapter.add() (см. Код ниже), поскольку ArrayAdapter имеет метод add(). Но это не сработало. Каков правильный способ добавления элементов в ListView?Как добавить элементы в ListView?

public class LinearLayoutDemo extends ListActivity implements OnItemClickListener { 
    private static final String[] items={"1", "2", "4", "8", "16", "32", "64"}; 
ListView myLV; 
ArrayAdapter myAdapter; 

@Override public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, items); 
    myLV = (ListView) findViewById(android.R.id.list); 
    myLV.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    myLV.setAdapter(myAdapter); 

    // The following causes the program to fail: 
    myAdapter.add("128"); 
} 

Кроме того, программа вылетает, если я пытаюсь выполнить myAdapter.clear(). Я не правильно использую ArrayAdapter?

+0

«Но это не сработало», «Кроме того, программа вылетает». Что это значит? Что происходит? Также публикуйте вывод журнала любых исключений. – SimonSays

+0

Когда я говорю, что это не сработало, я имею в виду, что программа перестает работать с этим сообщением об ошибке на устройстве: К сожалению com.example.mine остановился. Затем программа выходит. –

+0

@JB_User: Я думаю, что некоторое время назад я вспоминал аналогичный вопрос, который в конечном итоге пришел к выводу, что 'ArrayAdapter.add()' не работает должным образом, когда ему передан массив, и вместо этого использовать список. Это легко сделать с помощью 'Arrays.asList()'. – MowDownJoe

ответ

2

Вы должны добавить к items, а затем позвонить по телефону myAdapter.notifyDataSetChanged(). Но так, как вы определили items как final, вы не можете добавить. Если вы хотите легко добавить новый элемент, вы должны объявить его как ArrayList<String>.

public class LinearLayoutDemo extends ListActivity implements OnItemClickListener { 
private static List<String> items = Arrays.asList("1", "2", "4", "8", "16", "32", "64"); 
ListView myLV; 
ArrayAdapter myAdapter; 

@Override public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 

myAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_activated_1, items); 
myLV = (ListView) findViewById(android.R.id.list); 
myLV.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
myLV.setAdapter(myAdapter); 


items.add("128"); 
myAdapter.notifyDataSetChanged(); 
} 
+0

Я пробовал это и получил множество ошибок компилятора: [javac] Компиляция 3 исходных файлов в/home/roaduser/src/ANDROID/MyProjects/ShoppingCartFrag/bin/classes [javac]/home/roaduser/src/ANDROID/MyProjects/ShoppingCartFrag/src/com/commonsware/android/linearpct/LinearLayoutDemo.java: 28: незаконный старт типа [javac] private static ArrayList items = new ArrayList () {"1", "2", "4", " «8», «16», «32», «64»}; –

+0

Я отредактировал свой ответ. –

+0

Вы не можете инициализировать ArrayList таким образом. Это похоже на то, как вы инициализируете массив, но списки не инициализируются таким образом. Попробуйте следующее: Список strings = Arrays.asList ("1", "2", "3"); –

0

Вам нужно позвонить:

myAdapter.notifyDataSetChanged(); 

на адаптере после добавления элементов для уведомления о любых изменениях в наборе данных адаптера, но вы не можете изменить набор данных после создания Array. вместо этого используйте ArrayList.

+0

Я добавил этот звонок в свой код. Это все еще не работает для меня. Я получаю это сообщение об ошибке: К сожалению com.example.mine остановился. –

+0

сообщение полный след стека в вашем вопросе. –

+0

Что вы подразумеваете под полной трассировкой стека? Вывод «adb logcat»? –

Смежные вопросы