Tôi có một ứng dụng tạo nhiều đệ quy của một hoạt động khi nó đi qua một hệ thống tệp (một hoạt động trên mỗi thư mục). Tôi lấy dữ liệu thông qua Intent khi di chuyển về phía trước trong ngăn xếp hoạt động (tức là duyệt qua thư mục bình thường). Các ứng dụng chạy tốt khi tôi đi từ thư mục mẹ sang thư mục con. Tôi gặp vấn đề khi quay trở lại, vì danh sách các tập tin/thư mục vẫn giữ nguyên hoạt động trước đó (đứa trẻ). Tôi không muốn truy xuất lại dữ liệu thư mục từ internet, vì vậy có thể theo dõi trạng thái hoạt động trước đó? Đây là một đoạn mã của hoạt động của tôi. Cảm ơnQuay trở lại hoạt động đệ quy (FileSystem like)
public class RisorseActivity extends DashboardActivity implements Observer {
private Docente docente;
private String get_response;
private String response;
//private HttpsClient client;
private ListView list;
private RelativeLayout progressLayout;
private ProgressBar progressBar;
private TextView txtMateriale;
private ArrayList<Risorsa> risorseList;
private RisorseAdapter risAdapter;
private RisorseList risList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_risorse);
setTitleFromActivityLabel(R.id.title_text);
list = (ListView) findViewById(R.id.ListRisorse);
list.setClickable(true);
Intent intent = getIntent();
// vengono recuperati i parametri dalla activity chiamante
docente = (Docente) intent.getSerializableExtra(getPackageName() + ".Docente");
//cartella = (Insegnamento) intent.getSerializableExtra(pkg + ".Insegnamento");
get_response = intent.getExtras().getString("get_response");
response = intent.getExtras().getString("response");
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view,
int position, long index) {
if (risorseList.get(position).getType().equalsIgnoreCase("Folder")) {
Intent intRisorse = new Intent(getApplicationContext(), RisorseActivity.class);
intRisorse.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intRisorse.putExtra(getPackageName() + ".Docente", docente);
intRisorse.putExtra("get_response", risorseList.get(position).getURL());
startActivity(intRisorse);
} else if (risorseList.get(position).getType().equalsIgnoreCase("File")) {
//--------------- DOWNLOAD DEL FILE-------------------
}
}
});
startRisorseService();
}
// Aggiorna la View della Activity popolando la lista dei docenti trovati
private void updateView() {
this.risAdapter = new RisorseAdapter(this, this.risorseList);
if (this.risAdapter != null) {
this.list.setAdapter(this.risAdapter);
} else {
Toast.makeText(this, "Errore caricamento lista materiale",
Toast.LENGTH_LONG).show();
}
}
private void startRisorseService() {
// risList conterrà il nostro modello dei dati (l'array di oggetti
// Ricevimento)
risList = RisorseList.getInstance();
if (risList.countObservers() == 0)
risList.addObserver(this); // aggiungiamo la nostra "View" come
// osservatore del modello dati
loginState = ((LoginState) getApplicationContext());
Handler handler = new RisorseHandler();
//IT IS THE TASK THATH RETRIEVE THE DATA
RisorseService task = null;
if (response != null){
task = new RisorseService(handler, loginState, response);
}else
task = new RisorseService(handler, loginState);
if (task != null)
task.execute(get_response);
}
public void update(Observable observable, Object arg1) {
if(observable instanceof RisorseList){
// in quanto potremmo avere piu modelli dati
// verifichiamo su quale modello è avvenuto un cambiamento dei dati
// prima di effettuare il cast
this.risorseList = ((RisorseList) observable).getData();
}
updateView();
risList.deleteObserver(this);
}
public void onClickRefresh(View v) {
startRisorseService();
}
@Override
protected void onResume(){
super.onResume();
// IF I UNCOMMENT THESE LINES IT WORK BUT RETRIEVE DATA FROM INTERNET AGAIN!!!
/*if (risAdapter == null)
startRisorseService();
else{
risAdapter.notifyDataSetChanged();
}*/
if (risAdapter != null)
updateView();
}
}