我有一個活動,當我點擊刷新操作欄圖標時,它啓動一個異步任務。我在mainactity中有異步任務的回調。在預先執行我正在顯示進度條上的操作欄和postexecute我顯示刷新項目。但是,當異步任務啓動後屏幕旋轉時,onpostexecute會運行,但不會調用invalidate選項菜單。onPostExecute回調不呼叫invalidateOptionsMenu
請幫我一把。
這裏是我的MainActivity:
package in.cdac.enbee;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity implements RefreshTask.TaskCallbacks {
\t // Our created menu to use
private Menu mymenu;
\t volatile static boolean isrefreshing=false;
\t
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
\t Log.d("Debug", "OncreateOptionsMenu");
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// We should save our menu so we can use it to reset our updater.
mymenu = menu;
if(isrefreshing) {
\t menu.findItem(R.id.action_refresh).setActionView(R.layout.action_progressbar);
\t \t } else {
\t \t \t menu.findItem(R.id.action_refresh).setActionView(null);;
\t \t }
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
\t
switch(item.getItemId()) {
case R.id.action_refresh:
\t // Do animation start
new RefreshTask(this).execute();
return true;
case R.id.action_settings:
\t return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onSaveInstanceState (Bundle savedInstanceState) {
\t //Log.d("Debug", "OnSave");
\t //Always call superclass first
\t super.onSaveInstanceState(savedInstanceState);
\t // Restore value of members from saved state
//savedInstanceState.putBoolean("isRefreshing", isrefreshing);
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
\t //Log.d("Debug", "OnRestore");
\t // Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
// Restore value of members from saved state
\t //isrefreshing = savedInstanceState.getBoolean("isRefreshing");
} else {
// Probably initialize members with default values for a new instance
\t //isrefreshing = false;
}
}
\t @Override
\t public void onPreExecute() {
\t \t // TODO Auto-generated method stub
\t \t isrefreshing = true;
\t \t invalidateOptionsMenu();
\t }
\t @Override
\t public void onCancelled() {
\t \t // TODO Auto-generated method stub
\t \t isrefreshing = false;
\t \t invalidateOptionsMenu();
\t }
\t @Override
\t public void onPostExecute(Boolean done) {
\t \t // TODO Auto-generated method stub
\t \t isrefreshing = false;
\t \t
\t \t if(done) {
\t \t Toast.makeText(this, "Done refreshing", Toast.LENGTH_SHORT).show();
\t } else {
\t \t Toast.makeText(this, "Downloading Failed", Toast.LENGTH_SHORT).show();
\t }
\t \t invalidateOptionsMenu();
\t }
}
和我的異步任務:
package in.cdac.enbee;
import android.os.AsyncTask;
public class RefreshTask extends AsyncTask<Void, Void, Boolean> {
\t
/**
\t *
\t */
static interface TaskCallbacks {
\t \t void onPreExecute();
\t \t void onCancelled();
\t \t void onPostExecute(Boolean done);
\t }
private TaskCallbacks mCallbacks;
public RefreshTask(TaskCallbacks mCallbacks) {
\t \t this.mCallbacks = mCallbacks;
\t }
@Override
\t protected void onPreExecute() {
\t \t mCallbacks.onPreExecute();
\t \t
\t }
@Override
protected void onCancelled() {
if (mCallbacks != null) {
mCallbacks.onCancelled();
}
}
@Override
protected Boolean doInBackground(Void... nope) {
try {
// Set a time to simulate a long update process.
Thread.sleep(4000);
return true;
} catch (Exception e) {
return false;
}
}
@Override
\t protected void onPostExecute(Boolean done) {
\t \t if (mCallbacks != null) {
\t \t \t mCallbacks.onPostExecute(done);
\t \t }
\t }
}
和progressba我的佈局文件R:
<?xml version="1.0" encoding="utf-8"?>
<ProgressBar \t xmlns:android="http://schemas.android.com/apk/res/android"
\t \t android:id="@+id/progressBar"
\t \t android:layout_width="wrap_content"
\t \t \t android:layout_height="wrap_content">
</ProgressBar>
謝謝。
這似乎是你的代碼的一部分缺失。 – Okas 2014-10-18 20:55:20
@Okas你能告訴我哪部分代碼? – 2014-10-19 05:21:56
對不起,我誤解了你的代碼。 – Okas 2014-10-19 10:07:35