开发者

Activity group does not refresh activities when back button is clicked

I have a tabhost on my application and I'm using an Activity group which handles 3 activities inside.

Example: ActivityGroup Handles A -> B -> C

When i start this activities i'm using the flag Intent.FLAG_ACTIVITY_CLEAR_TOP.

My problem is when the user goes from A->B->C and press back button, my B activity shows up,开发者_如何学Python but it does not resume or reload or refresh. It has the same state as before.

For example if the user goes again to C, C is refreshed, but when from C goes back.... B is not.

On B I have implementend methods such as onResume, onStart, onReestart and debugging it the main thread never goes in there...

And i need to refresh B because C can make changes that change the content displayed on B.

I have googleled this for 3 days and I couldn't found a solution..


I had this problem too.

I was using ActivityGroup code based on this blog post.

When I pressed the back button the pervious View would load fine, but the activity associated with it would not fire the onResume().

I was using an extended activity with on overridden and public onResume().

I found this blog post, so tried casting the view as my extended activity and called onResume().

Bingo.

Edit.... here's some more detail...

public class YFIMenuListActivity extends ListActivity {
....
  @Override
  public void onResume() {
    super.onResume();
  }
....
}

onResume() is normally protected, but I override it and make it public so that my ActivityGroup can call it. I only have extended list activities in this activity group (I was just playing around). If you have different activities, each will have to override onResume() and I guess you'd have to look at the type of context you got back from v.getContext() before casting and calling it.

My ActivityGroup looks something like this:

public class BrowseGroup extends ActivityGroup {
.....
  @Override
  protected void onResume() {
    super.onResume();
    // call current activity's onResume()
    View v = history.get(history.size()-1);
    YFIMenuListActivity currentActivity = (YFIMenuListActivity)v.getContext();
    currentActivity.onResume();
  }
....
}


I've managed to implement an expanded version of cousin_itt's approach.

In both of my activities being used within the activity group I changed onResume from :

protected void onResume()

to

public void onResume()

I then wrote the following onResume function in my ActivityGroup to manually fire off onResumes:

@Override
protected void onResume() { 
super.onResume();
View v = history.get(history.size()-1);

MainPeopleView currentActivity = null;   

try {
    currentActivity = (MainPeopleView)v.getContext();
    currentActivity.onResume();
}
catch ( ClassCastException e ) {
    Log.e(TAG, e.toString());
}

ProfileView otherActivity = null;

try {
otherActivity = (ProfileView)v.getContext();
otherActivity.onResume();
}
catch ( ClassCastException e ) {
    Log.e(TAG, e.toString());
}
}

I have to say, this feels like the worst android hack I've ever written. I'm never using activitygroup again.


((ReportActivity)getLocalActivityManager().getActivity("ReportActivity")).onResume();

ReportActivity is that name you want to back Activity ps: v.getContext();

only return the ActivityGroup ,it can't invoke child Activity onResume


I have found that onFocusChanged(boolean hasFocus) is great for situations like ActivityGroup. This will fire, even if onResume() does not. I use it for a few of my apps that have TabHosts and ActivityGroups. Here you can force the refresh and insure that it always gets fired when your Activity regains the focus.


I hope you have write your refresh data code in this method onResume().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜