Android活动生命周期和片段

时间:2015-02-12 10:22:27

标签: android android-fragments

我一直在处理片段一段时间,而且我觉得令人沮丧的是我无法从片段中获得活动状态。我不能做像

这样的事情

if (getActivity().getState == ActivityState.PAUSED)

是否有任何通用方法来处理片段中的活动生命周期更改,而不需要在活动中使用大量样板和回调覆盖,或者我是否必须自己手动实现某个状态管理器?

修改 例: 在活动中我需要加载数据。如果数据为空,则显示一个片段(如果不为空) - 显示另一个片段。因此,异步调用开始,同时活动进入暂停状态。提交片段会导致异常。

getAllXCommand.execute(new Callback<Result<List<X>>>() {
        @Override
        public void onSuccess(Result<List<X>> data) {
            Logger.d(String.format("Received addresses: %d", data.getData().size()));
            //How to get state of activity here?
            if (data.getData().isEmpty()) {
                setEmptyFragment();
            } else {
                setXFragment(data.getData());
            }
            addRemovePresenter.enableAddAction();
        }
    });

2 个答案:

答案 0 :(得分:0)

onPauseonResume中更改的活动中添加一个布尔变量并进行检查。

答案 1 :(得分:0)

好的,我做了我不想做的事情。我为我感兴趣的活动状态的所有活动和枚举创建了基本活动。

public class BaseActivity extends Activity{

private ActivityState activityState;

public ActivityState getActivityState() {
    return activityState;
}


@Override
protected void onResume() {
    super.onResume();
    activityState = ActivityState.RESUMED;
}

@Override
protected void onPause() {
    super.onPause();
    activityState = ActivityState.PAUSED;
}

@Override
protected void onStop() {
    super.onStop();
    activityState = ActivityState.STOPPED;
}

@Override
protected void onDestroy() {
    super.onDestroy();
    activityState = ActivityState.DESTR0YED;
}
}

public enum ActivityState {
RESUMED(true), PAUSED, STOPPED, DESTR0YED;
boolean canAddFragment;

ActivityState(boolean canAddFragment) {
    this.canAddFragment = canAddFragment;
}

ActivityState() {
    this(false);
}

public boolean canAddFragment() {
    return canAddFragment;
}
}