为什么 ArrayAdapter 在此示例中始终为 null?

Why is ArrayAdapter always null in this example?

我的代码结构如下:

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
        }       
    }   

我的问题是:
为什么如果在我的 initAdapter 中,如果我在标记为 HERE 2 的当前版本中注释掉 getUserStatus 并取消注释 HERE 1,那么 getUserStatus 就是 运行 setListAdapter 之前 adaptergetUserStatus 中总是 null?我总是在所有线程的日志中看到 Adapter is NULL

很简单。在 HERE 1 中,您试图从尚未初始化的适配器中获取与用户相关的内容,该适配器正在使用函数 setListAdapters(users) 进行初始化。在 HERE 2 中,您在初始化适配器后获得用户,因此它工作正常。