1 继承 AnsyncTaskLoader 类
2 实现 loadInBackground 方法
3 使用 LoaderManager初始化 Loader
4 在 LoaderCallbacks 接口的 onCreateLoader 方法中放回 自定义的loader
1
public class UserLoader extends AsyncTaskLoader<List<UserBean>> {
public UserLoader(@NonNull Context context) {
super(context);
}
@Override
protected void onStartLoading() {
super.onStartLoading();
if(isStarted()){ //如果load启动 强制执行loadInBackground;
forceLoad();
}
}
//在子线程加载数据
@Nullable
@Override
public List<UserBean> loadInBackground() {
//
List<UserBean> list = new ArrayList<>();
list.add(new UserBean("小雪","xu"));
list.add(new UserBean("小飞","xf"));
list.add(new UserBean("小宇","xy"));
return list;
}
}
public class CustomLoader extends AppCompatActivity {
@BindView(R.id.listuser)
ListView listuser;
private List<UserBean> list = new ArrayList<>();
LoaderManager manager;
private UserAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_loader);
ButterKnife.bind(this);
mAdapter = new UserAdapter();
listuser.setAdapter(mAdapter);
manager = LoaderManager.getInstance(this);
manager.initLoader(12, null, new LoaderManager.LoaderCallbacks<List<UserBean>>() {
@NonNull
@Override
public Loader<List<UserBean>> onCreateLoader(int id, @Nullable Bundle args) {
return new UserLoader(CustomLoader.this);
}
@Override
public void onLoadFinished(@NonNull Loader<List<UserBean>> loader, List<UserBean> data) {
list.addAll(data);
mAdapter.notifyDataSetChanged();
}
@Override
public void onLoaderReset(@NonNull Loader<List<UserBean>> loader) {
}
});
}
class UserAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public UserBean getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = LayoutInflater.from(CustomLoader.this).inflate(R.layout.user_item,
parent, false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.username.setText(getItem(position).getUsername());
viewHolder.password.setText(getItem(position).getPassword());
return convertView;
}
class ViewHolder {
@BindView(R.id.username)
TextView username;
@BindView(R.id.password)
TextView password;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
}