2013-08-19 3 views
0

У меня есть listView внутри Activity внутри макета вкладки. Если я долгое время нажимаю на элемент, я получаю возможность переименовать элемент. После того, как элемент будет переименован, изменение не будет видно, пока операция не будет перезапущена.Обновить ListView или активность?

Я попытался решить проблему, просто создав новое намерение и вновь открыв активность, но поскольку эта деятельность находится внутри tablayout, она не работает. Я также попытался вновь открыть tabLayout активность, но затем он автоматически переходит на вкладку 1, в то время как я пытаюсь обновить ListView внутри вкладки 2.

Итак, я попытался решить ее путем создания updateListView() метод:

public void updateListView(){ 
    listAdapter.clear(); 
    listAdapter.addAll(recordedFilesArray); 
    listAdapter.notifyDataSetChanged(); 
} 

Но это тоже не работает. Когда я использую этот метод, он полностью очищает listView, а затем я должен снова перезапустить активность, чтобы увидеть результаты.

Итак, у кого есть представление, что я могу сделать, чтобы увидеть изменения спискаView без перезапуска активности? Кстати, если это помогает, я читаю ListView (ArrayList) из текстового файла.

+0

Смотреть это: http://stackoverflow.com/questions/5991968/how-to-force-an-entire-layout-view-refresh – roky

ответ

0

Я нашел проблему. ArrayList не был изменен до тех пор, пока активность не была перезапущена. Мне пришлось вызвать arrayList.set(), чтобы изменить элемент в ArrayList. Теперь он работает так, как должен.

Мой код:

recordedFilesArray.set(toDelete, input.getText().toString()); //toDelete is arg2 variable (onLongItemClickListener) 
listAdapter.notifyDataSetChanged(); 
0

Попробуйте использовать notifyDataSetChanged() только без очистив listAdapter

+0

Уже пробовал, не делает работа – Guy

0

Вы можете сделать отдельный класс адаптера и реализовать свою функцию GetView() для управления этим. Ваша активность передаст список массивов адаптеру. Адаптер getView() будет следить за отображением содержимого из списка.

Когда список изменен, вам необходимо повторно инициализировать адаптер. Таким образом, getView() всегда будет иметь обновленные данные для отображения на экране.

+0

Большое спасибо за ваш ответ, но я новичок в программировании на Android, поэтому это объяснение мне очень сбивает с толку. Есть ли вероятность, что вы могли бы дать мне небольшой пример кода с комментариями? – Guy

0

Для переименования объекта вы можете изменить объект объекта в ArrayList, , а затем позвонить adapter.notifyDataSetChanged().

+0

Это именно то, что я пытался сделать, но он не работает – Guy

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