Добавить еще один элемент в ListActivity - PullRequest
0 голосов
/ 15 марта 2012

Я создал ListView, используя ListActivity и ArrayAdapter для файлов Sdcard.Это работает хорошо.

Затем я хочу добавить один дополнительный элемент в ListView. Поэтому я добавил один элемент в список и вызвал notifyDataSetChanged ().Но это показывает силу близко. Почему?Помоги мне.

        FilenameFilter fnf=new FilenameFilter()
        {

            public boolean accept(File dir, String filename) {
                // TODO Auto-generated method stub
                if(new File(dir+"/"+filename).isDirectory())
                    return true;
                else
                return false;
            }

        };
        filelist=sdcard.list(fnf);
        List<String> list=Arrays.asList(filelist);
        Collections.sort(list);
        ArrayAdapter<String> listadap=new ArrayAdapter<String>(this,R.layout.filelist,R.id.listview,list);
        setListAdapter(listadap);
        list.add("Test");
        listadap.notifyDataSetChanged();

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Если вы хотите динамически изменять содержимое вашего ListView. Создайте свой CustomAdapter, простирающийся от BaseAdapter. Передайте список конструктору адаптера. Перепишите методы интерфейса BaseAdapter.

И добавьте метод add в адаптер. Вы получите экземпляр List в адаптере (сохраните его в поле из конструктора). Метод add добавляет элемент в ArrayList, а затем просто this.notifyDataChanged() (это потому, что вы находитесь в CustomAdapter)

Этот метод решит проблему скачков в ListView с воссозданием адаптера.

0 голосов
/ 23 марта 2012

Спасибо за вашу помощь.

Я нашел другое решение, чтобы добавить Button в мой список.

bt_up=new Button(this);
bt_up.setText("Up");
getListView().addView(bt_up);

Это также работает для TextView.

0 голосов
/ 15 марта 2012

Почему вы установили List.add("Test"); после настройки адаптера?

Можете ли вы изменить это, сделайте это.

FilenameFilter fnf=new FilenameFilter()
    {

        public boolean accept(File dir, String filename) {
            // TODO Auto-generated method stub
            if(new File(dir+"/"+filename).isDirectory())
                return true;
            else
            return false;
        }

    };
    filelist=sdcard.list(fnf);
    List<String> list=Arrays.asList(filelist);
    list.add("Test");
    Collections.sort(list);
    ArrayAdapter<String> listadap=new ArrayAdapter<String>(this,R.layout.filelist,R.id.listview,list);
    setListAdapter(listadap);        
    //listadap.notifyDataSetChanged();
...