-
自定義資料類型
*/
public class UserBean {
private String userName;
private String passWord;
public UserBean(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
//自定義UserLoader
public class UserLoader extends AsyncTaskLoader<List> {
public UserLoader(@NonNull Context context) {
super(context);
}
@Override
protected void onStartLoading() {
super.onStartLoading();
//如果Load啟動了,強制執行loadInBackground
if (isStarted()){
forceLoad();
}
}
/**
* 在子線程加載資料
* @return
*/
@Nullable
@Override
public List<UserBean> loadInBackground() {
//模拟從網絡傳回資料
List<UserBean> list=new ArrayList<>();
list.add(new UserBean("張學友","12345"));
list.add(new UserBean("劉德華","12345"));
list.add(new UserBean("林青霞","12345"));
list.add(new UserBean("張曼玉","12345"));
return list;
}
}
//業務處理
public class CustomLoaderActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List> {
private List<UserBean> users=new ArrayList<>();
private ListView mListView;
private LoaderManager loaderManager;
private UserAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_loader);
mListView = findViewById(R.id.custom_listView);
mAdapter = new UserAdapter();
mListView.setAdapter(mAdapter);
loaderManager = getSupportLoaderManager();
loaderManager.initLoader(0,null,this);
}
@NonNull
@Override
public Loader<List<UserBean>> onCreateLoader(int i, @Nullable Bundle bundle) {
//傳回自定義Loader
return new UserLoader(this);
}
@Override
public void onLoadFinished(@NonNull Loader<List<UserBean>> loader, List<UserBean> data) {
users.addAll(data);
mAdapter.notifyDataSetChanged();
}
@Override
public void onLoaderReset(@NonNull Loader<List<UserBean>> loader) {
}
class UserAdapter extends BaseAdapter{
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int position) {
return users.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=convertView;
ViewHolder holder;
if (view==null){
view=LayoutInflater.from(CustomLoaderActivity.this).inflate(R.layout.user_item,null);
holder=new ViewHolder();
holder.usernameTv= view.findViewById(R.id.tv_username);
holder.passwordTv=view.findViewById(R.id.tv_password);
view.setTag(holder);
}else {
holder= (ViewHolder) view.getTag();
}
UserBean userBean= (UserBean) getItem(position);
holder.usernameTv.setText(userBean.getUserName());
holder.passwordTv.setText(userBean.getPassWord());
return view;
}
class ViewHolder{
TextView usernameTv;
TextView passwordTv;
}
}
}
//activity_custom_loader布局
<?xml version="1.0" encoding="utf-8"?>
<ListView
android:id="@+id/custom_listView"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
//user_item布局
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="username"
android:textSize="30sp"
android:id="@+id/tv_username"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="password"
android:textSize="30sp"
android:id="@+id/tv_password"/>