[英]Android app hangs after subsequent call to startActivityForResult
[英]Android rotation after startActivityForResult
我有2个活动, MainActivity
(包含MainFragment
)和SearchActivity
。
当用户单击MainActivity
的搜索按钮时,我使用startActivityForResult()
打开SearchActivity
。 然后,用户输入他们的查询,然后将该查询作为结果返回给MainActivity
,在这里我有一个searcher
对象,该对象实际上对该查询执行搜索。
但是,在以下情况下我遇到了问题:我在MainActivity
,然后单击搜索按钮。 我转到SearchActivity
,继续旋转手机。 我键入查询,然后返回MainActivity
,由于searcher
为null导致崩溃。
所以,我明白,当我旋转屏幕MainActivity
是越来越破坏并重新创建,和我节省了实例的状态,我遇到的问题是onActivityResult()
是越来越之前调用onActivityCreated()
在MainFragment
。 在处理结果之前,如何确保MainFragment
恢复到以前的状态?
编辑:
这是我的代码(经过大量编辑;适用于工作)。
主要活动
public class MainActivity extends AppCompatActivity {
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mainFragment = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "fragment", mainFragment);
}
}
主要片段
public class MainFragment extends Fragment {
private Searcher searcher;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
searcher = new Searcher();
if (savedInstanceState != null) {
// restore state
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (data.hasExtra("query")) {
String query = data.getStringExtra("query");
searcher.search(query);
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save state
}
}
例如,当我在使用WebView时遇到麻烦时,可以这样做:
@Override
protected void onSaveInstanceState(Bundle outState ) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState); //Do your own action
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mWebView.restoreState(savedInstanceState); // Do your own action
}
这可能有助于崩溃:
if (savedInstanceState == null)
{
mWebView.loadUrl("https://goo.gl/6wE4Di"); //do your own action
}
加
android:configChanges="orientation|screenSize"
在Android Manifest中的MainActivity标签中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.