【发布时间】:2013-11-04 14:18:04
【问题描述】:
我想在用户单击操作栏中的菜单项并启动执行某些工作的 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);
}
}
}
}
在重新创建 Activity(例如旋转屏幕时)时会出现此问题,因为进度条未显示并且 MyTask 中的 menuItem 引用变得无效。所以问题是: 1)创建菜单(onCreateOptionsMenu 方法)时,我如何知道 menuItem 是否被点击? 2) 在 onPostExecute 中如何检索对 MenuItem 对象的有效引用?
【问题讨论】:
标签: android android-asynctask menuitem screen-rotation