所以我有一个字符串(ISBN)列表,需要使用这些字符串获取相关的图书对象,并将其填充到listview中。问题是使用字符串获取图书对象的函数需要时间,因此获取30本书需要等待4或5秒钟。
我考虑了一种方法,即逐个获取图书对象,并在获取后将它们添加到列表中。但是此过程会冻结UI,直到完成添加所有图书为止。如果尝试将此过程放入新线程,它将不允许添加到任何UI对象(因为它来自另一个线程)。如果尝试将其放入AsyncTask中,则无法访问ListView,因为它位于MainActivity类中。
肯定有一种动态更新UI元素的方法,我肯定曾经见过它。有什么建议吗?
编辑:
以下是我实际用于向列表中添加项目的代码:
我考虑了一种方法,即逐个获取图书对象,并在获取后将它们添加到列表中。但是此过程会冻结UI,直到完成添加所有图书为止。如果尝试将此过程放入新线程,它将不允许添加到任何UI对象(因为它来自另一个线程)。如果尝试将其放入AsyncTask中,则无法访问ListView,因为它位于MainActivity类中。
肯定有一种动态更新UI元素的方法,我肯定曾经见过它。有什么建议吗?
编辑:
以下是我实际用于向列表中添加项目的代码:
//List view and adapter setup
listView = (ListView) findViewById(R.id.listViewCheckout);
bookAdapter = new SearchBookAdapter(getApplicationContext(), R.layout.search_row_layout);
listView.setAdapter(bookAdapter);
for(int i = 0; i < searches.size(); i++) {
//Get the book
Book book = BackendFunctions.getBookFromISBN(fbSnapshot, searches.get(i));
//Assign data to the adapter variables
Bitmap cover = book.getCover();
String title = book.getTitle();
String author = book.getAuthor();
//Add data to the adapter and set the list
SearchBookDataProvider dataProvider = new SearchBookDataProvider(cover, title, author);
bookAdapter.add(dataProvider);
bookAdapter.notifyDataSetChanged();
}