我想在用戶單擊操作欄中的菜單項並啓動一個可以完成某些工作的AsyncTask時顯示進度條。完成後,任務恢復菜單。這是我的代碼:屏幕旋轉後更新菜單項
public class DevicesActivity extends FragmentActivity {
...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.my_menu_action:
MyTask task = new MyTask();
task.execute(item);
// Show a progress bar instead of default actionview
item.setActionView(R.layout.progress_circle);
item.expandActionView();
return true;
}
return super.onOptionsItemSelected(item);
}
...
private class MyTask extends AsyncTask<MenuItem, Object, Object> {
MenuItem menuItem;
protected Object doInBackground(MenuItem... items) {
item = items[0];
try {
Thread.sleep(2000);
}
catch (Exception e) {}
return null;
}
protected void onPostExecute(Object result) {
// Restore default action view
if (menuItem != null) {
menuItem.collapseActionView();
menuItem.setActionView(null);
}
}
}
}
當活動被重建,會出現問題,因爲未示出的進度條和內部MyTask的菜單項參考變爲無效(旋轉屏幕時例如)。所以問題是: 1)當創建菜單(onCreateOptionsMenu方法)時,我怎麼知道menuItem是否被點擊? 2)在onPostExecute如何檢索一個MenuItem對象的有效引用?
如何簡單地將MenuItem引用保存在onSaveInstanceState包中?我試圖將其轉換爲可序列化,但這不起作用。 – ElliotM
我錯了,我應該說「保存菜單項的狀態」,而不是菜單項的引用。 – jagmohan