gpt4 book ai didi

java - startActivityForResult 之后 Android 旋转

转载 作者:行者123 更新时间:2023-12-01 06:25:46 25 4
gpt4 key购买 nike

我有 2 个 Activity ,MainActivity(包含 MainFragment)和 SearchActivity

当用户单击 MainActivity 中的搜索按钮时,我使用 startActivityForResult() 打开 SearchActivity。然后,用户输入查询,我将该查询作为结果返回到 MainActivity,其中我有一个 searcher 对象,该对象实际上使用查询执行搜索。

不过,我在以下情况下遇到了问题:我位于 MainActivity 中并单击搜索按钮。我转到 SearchActivity 并继续旋转手机。我输入查询并返回到 MainActivity,它崩溃了,因为 searcher 为 null。

所以我知道,当我旋转屏幕 MainActivity 时,它会被销毁并重新创建,并且我正在保存实例状态,我遇到的问题是 onActivityResult()MainFragment 中的 onActivityCreated() 之前被调用。在处理结果之前,如何确保 MainFragment 恢复到之前的状态?

编辑:

这是我的(经过大量编辑;用于工作)代码。

主要 Activity

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);
}
}

主要 fragment

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
}

关于java - startActivityForResult 之后 Android 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com