Hi! So i've been trying to get a solution for a very specific problem that involves using Async tasks and dealing with the rotation and also a custom header that contains a progressbar view(the small spinner one, including a text view saying "Loading..."). I've followed this<https://github.com/commonsguy/cw-android/blob/master/Rotation/RotationAsync/src/com/commonsware/android/rotation/async/RotationAsync.java> example to deal with the async tasks and the rotation, but i still have the problem of the progressbar, if activity A launches a task and i imediately go to activitity B, the progress bar in activity B should still appear visibile even though the task was launched from activity A, how do i this without a static reference for the progressbar view?, the postexecute method of the async have to consider the possibility that the progressbar reference should now be in another activity, right? Here's my code for my parent activity where subactivities extend from:
public abstract class ParentClass extends Activity{ protected static ProgressBar progressHeader = null; protected static TextView progressLoading = null;; protected static int progressBarstate=ProgressBar.GONE; protected static int themeId; private ProgressBarThread task=null; //this method will get the id for the layout public abstract int getLayoutId(); //this method will launch respejcting oncreate logic for each activity public abstract void initActivity(); //thi smethod will return window header menu context text string public abstract String getWindowTitle(); //this method is used to refresh contents for a screen public abstract void updateResultsInUi(); //nethod for definined specific theme public abstract int getThemeId(); @Override protected void onCreate(Bundle savedInstanceState) { //set theme first for showing correct header setTheme(getThemeId()); super.onCreate(savedInstanceState); themeId=getThemeId(); //in case the screen will have a header if(getThemeId()!=R.style.CustomThemeNoHeader){ requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(getLayoutId()); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_window_title); //set text header ((TextView)findViewById(R.id.header_title)).setText(getWindowTitle()); progressRefreshState(progressBarstate); }else { setContentView(getLayoutId()); } //execute subactivity logic initActivity(); } /** * check for loading/spinner icon in * case there's a thread working in background */ @Override public void onRestart () { super.onRestart(); if(getThemeId()!=R.style.CustomThemeNoHeader){ //Toast.makeText(this, "visible(0): " + ProgressBar.VISIBLE+" : Current :" + getProgressBarstate(), Toast.LENGTH_LONG).show(); progressRefreshState(progressBarstate); } } @Override public Object onRetainNonConfigurationInstance() { if(task!=null) task.detach(); return(task); } /** * refresh static references for both progress * info views and set visibility state */ private void progressRefreshState(int state) { progressHeader = (ProgressBar) findViewById(R.id.progresspinner); progressLoading = (TextView) findViewById(R.id.progresstext); progressHeader .setVisibility(state); progressLoading.setVisibility(state); } //todo change location for getting session protected String getSession(){ LogInManager login=new LogInManager(ParentClass.this); try { boolean session=login.getNewSession( QuadrosMobileApplicationContext.getInstance().getUser(), QuadrosMobileApplicationContext.getInstance().getPass()); if(session) return getString(R.string.login_sucessful); else return getString(R.string.login_failed); } catch (RequestException e) { return e.getMessage(); } } /** * do asynctask for background work */ public void doAsyncTask(){ task= (ProgressBarThread)getLastNonConfigurationInstance(); if(task==null){ task= new ProgressBarThread(this); task.execute(); //add to the set of tasks QuadrosMobileApplicationContext appliContext= (QuadrosMobileApplicationContext)getApplicationContext(); appliContext.getAsyncTasks().add(task); }else{ task.attach(this); } } static public class ProgressBarThread extends AsyncTask<Void, Void, Void>{ ParentClass activity=null; public ProgressBarThread(ParentClass activity) { attach(activity); } @Override protected void onPreExecute() { Logger.write("ProgressBarThread ", " AsyncTask pre execution ", Logger.INFO); if(themeId!=R.style.CustomThemeNoHeader){ progressHeader.setVisibility(ProgressBar.VISIBLE); progressLoading.setVisibility(ProgressBar.VISIBLE); } progressBarstate=ProgressBar.VISIBLE; } @Override protected Void doInBackground(Void... params) { Logger.write("ProgressBarThread ", "initialized", Logger.INFO); activity.updateResultsInUi(); Logger.write("ProgressBarThread ", "Finish", Logger.INFO); return null; } @Override protected void onPostExecute(Void result) { Logger.write("ProgressBarThread ", " AsyncTask post execution ", Logger.INFO); //remove this task from collection QuadrosMobileApplicationContext appliContext= QuadrosMobileApplicationContext.getInstance(); appliContext.getAsyncTasks().remove(this); //check if there's more tasks in the collection if(appliContext.getAsyncTasks().isEmpty()){ if(themeId!=R.style.CustomThemeNoHeader){ progressHeader.setVisibility(ProgressBar.GONE); progressLoading.setVisibility(ProgressBar.GONE); } progressBarstate=ProgressBar.GONE; } } void detach() { activity=null; } void attach(ParentClass activity) { this.activity=activity; } } } regards, -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en