在Android中,Spinner通常用于展示一組選項(xiàng)供用戶選擇
public interface AsyncTaskCompletedListener {
void onTaskCompleted(List<String> data);
}
onTaskCompleted()
方法:public class MainActivity extends AppCompatActivity implements AsyncTaskCompletedListener {
// ...
@Override
public void onTaskCompleted(List<String> data) {
// 在這里處理異步加載的數(shù)據(jù),例如更新Spinner的適配器
}
}
loadDataFromServer()
的方法,它返回一個(gè)包含數(shù)據(jù)的列表:private class LoadDataTask extends AsyncTask<Void, Void, List<String>> {
private AsyncTaskCompletedListener listener;
public LoadDataTask(AsyncTaskCompletedListener listener) {
this.listener = listener;
}
@Override
protected List<String> doInBackground(Void... voids) {
List<String> data = new ArrayList<>();
try {
data = loadDataFromServer();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(List<String> data) {
if (listener != null) {
listener.onTaskCompleted(data);
}
}
}
LoadDataTask
實(shí)例,并傳入你在第2步中實(shí)現(xiàn)的AsyncTaskCompletedListener
:public class MainActivity extends AppCompatActivity implements AsyncTaskCompletedListener {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = findViewById(R.id.spinner);
new LoadDataTask(this).execute();
}
// ...
}
onTaskCompleted()
方法中,使用異步加載的數(shù)據(jù)更新Spinner的適配器:@Override
public void onTaskCompleted(List<String> data) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, data);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
現(xiàn)在,當(dāng)用戶打開(kāi)包含Spinner的Activity或Fragment時(shí),異步任務(wù)將負(fù)責(zé)從服務(wù)器加載數(shù)據(jù),并在數(shù)據(jù)加載完成后更新Spinner的適配器。