Mob*_*Dev 5 android screen-orientation rx-java rx-android
我使用类似于google-samples repo的MVP和RxJava .
我想问一下如何正确处理屏幕方向的变化.
还有另一种策略可以保存演示者状态和Observable状态:保留Fragment.这样就省略了将数据保存到的标准Android方式Bundle(只能保存简单变量,而不能保存网络请求的状态.)
Activity:
public class MainActivity extends AppCompatActivity implements MainActivityView {
private static final String TAG_RETAIN_FRAGMENT = "retain_fragment";
MainActivityPresenter mPresenter;
private MainActivityRetainFragment mRetainFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
initRetainFragment();
initPresenter();
}
private void initRetainFragment() {
FragmentManager fm = getSupportFragmentManager();
mRetainFragment = (MainActivityRetainFragment) fm.findFragmentByTag(TAG_RETAIN_FRAGMENT);
if (mRetainFragment == null) {
mRetainFragment = new MainActivityRetainFragment();
fm.beginTransaction().add(mRetainFragment, TAG_RETAIN_FRAGMENT).commit();
}
}
private void initPresenter() {
mPresenter = mRetainFragment.getPresenter();
mRetainFragment.retainPresenter(null);
if (mPresenter == null) {
mPresenter = new MainActivityPresenter();
}
mPresenter.attachView(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (!isFinishing()) {
mRetainFragment.retainPresenter(mPresenter);
return;
}
mPresenter.detachView();
mPresenter = null;
}
}
Run Code Online (Sandbox Code Playgroud)
保留Fragment:
public class MainActivityRetainFragment extends Fragment {
private MainActivityPresenter presenter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public void retainPresenter(MainActivityPresenter presenter) {
this.presenter = presenter;
}
public MainActivityPresenter getPresenter() {
return presenter;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意处理活动生命周期事件的方式.当Activity创建,留住Fragment被添加到堆栈中,并在生命周期事件,它是从堆栈中恢复.retain Fragment没有任何视图,它只是配置更改期间演示者的持有者.请注意主要调用,它允许从backstack恢复完全相同的片段(及其内容):
setRetainInstance(true)
Run Code Online (Sandbox Code Playgroud)
如果您担心内存泄漏:每次恢复演示者时,都会恢复演示者的视图:
mPresenter.attachView(this);
Run Code Online (Sandbox Code Playgroud)
所以先前的Activity参考被新的参考替换.
更多关于这种处理的配置变化在这里在这里
| 归档时间: |
|
| 查看次数: |
2585 次 |
| 最近记录: |