Android 为什么在本例中ArrayAdapter始终为空?
我的代码结构如下:Android 为什么在本例中ArrayAdapter始终为空?,android,multithreading,android-arrayadapter,android-listfragment,Android,Multithreading,Android Arrayadapter,Android Listfragment,我的代码结构如下: public class MyListFragment extends ListFragment { private ArrayList<User> users; private void initAdapter() { if(users == null) return; //getUserStatus(users); <———HERE 1 UsersAdapter adapter = new
public class MyListFragment extends ListFragment {
private ArrayList<User> users;
private void initAdapter() {
if(users == null) return;
//getUserStatus(users); <———HERE 1
UsersAdapter adapter = new UsersAdapter(users);
setListAdapter(users);
getUserStatus(users); // vs <—— HERE 2
}
private void getUserStatus(List<User> users) {
final UsersAdapter adapter = (UsersAdapter )getListAdapter();
for(User user:users) {
Thread t = new Thread(new Runnable() {
//code to fetch some data
if ( adapter == null) Log.e(“App”, “Adapter is NULL!”);
});
t.start();
}
}
private UsersAdapter extends ArrayAdapter<User> {
public UsersAdapter(List<User> users) {
super(getActivity(), 0, users);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//code to inflate and populate list item
}
}
公共类MyListFragment扩展ListFragment{
私有ArrayList用户;
私有void initAdapter(){
if(users==null)返回;
//getUserStatus(users);很简单。在这里1中,您试图从尚未初始化的适配器获取与用户相关的内容,该适配器正在使用函数setListAdapters(users)初始化。在这里2,初始化适配器后,您将获得用户,因此它工作正常。getListAdapter
返回您通过setListAdapter
提供的内容。您需要定义或初始化它getListAdapter()
正在做什么,setListAdapter()也一样.对于这里1,您得到的适配器为空,因为您在调用getAdapter
后初始化和设置适配器,而您没有setAdapter
时,显然会得到空适配器,但适配器是在“重”代码(http请求)之后访问的从后台线程。也就是说,说//code来获取一些数据的部分
非常耗时。