Tôi có một ListActivity
sẽ khởi chạy một số Activity
khác dựa trên lựa chọn danh sách. Điều này Activity
thứ hai cần phải tải một chút công bằng của dữ liệu từ internet và như vậy có một sự chậm trễ đáng chú ý giữa khi người dùng nhấp vào một mục và khi các màn hình Activity
. Đây là vấn đề bởi vì hiện tại tôi không có cách nào để chỉ ra cho người dùng biết rằng nhấp chuột của họ đang được xử lý (thậm chí chỉ thay đổi màu của mục danh sách được chọn sẽ đủ nhưng tôi không thể tìm được cách tốt để làm cái đó). Lý tưởng nhất là tôi có thể hiển thị một số không xác định ProgressDialog
trong khi tải Activity
thứ hai.Hiển thị thanh tiến trình khi Hoạt động đang tải
Tôi đã thử một vài cách tiếp cận khác nhau cho điều này nhưng dường như không có gì hoạt động như mong muốn.
Tôi đã thử những điều sau đây:
- Lấy dữ liệu serializable (không phải tất cả của nó nhưng một số phần) trong một
AsyncTask
trongActivity
đầu tiên và đi qua nó như một bổ sung cho các lần thứ hai. Điều này không thực sự làm việc tốt như mộtProgressDialog
Tôi tạo ra trongonPreExecute()
không hiển thị ngay lập tức (có vẻ như trì hoãn bởi việc xử lý được thực hiện trongdoInBackground()
đối với một số lý do.)
Đây là mã cho rằng:
AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
Dialog progress;
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(SearchActivity.this,
"Loading data", "Please wait...");
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
DatasetReader reader = new DatasetReader();
reader.setFundID(params[0]);
reader.addDatsets(FundProfile.datasets);
reader.populate();
return reader.toString();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progress.dismiss();
}
};
read.execute(selectedItem.getUniqueID());
try {
action = new Intent(SearchActivity.this, FundProfile.class);
action.putExtra("data", read.get());
} catch(Exception ex) {
ex.printStackTrace();
}
Trong phương pháp này hoạt động thứ hai của
onCreate()
(điều này không làm việc ở tất cả):requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarVisibility(true);
Dưới đây là phương pháp onCreate()
cho cách tiếp cận thứ hai:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitleColor(Color.WHITE);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarVisibility(true);
try {
setContentView(R.layout.fund_profile);
// init some data
setProgressBarVisibility(false);
} catch(Exception ex) {
FundProfile.this.finish();
}
}
Bạn đã thử phương pháp tiếp cận nào khác nhau? Bạn có thể chia sẻ nỗ lực của mình không? – Cristian
Tôi ngạc nhiên khi cách tiếp cận đầu tiên không hiệu quả. Một 'ProgressDialog' được hiển thị trong' onPreExecute() 'không nên được giữ bởi mã trong' doInBackground() ', có lẽ có một số vấn đề khác với mã của bạn? –
Có thể? Tôi đã thêm mã có liên quan .. – Adam