相关疑难解决方法(0)

android片段 - 如何在片段上推送另一个片段时保存片段中的视图状态

在android中,一个片段(比如说FragA)被添加到backstack而另一个片段(比如说FragB)会出现在顶部.现在回击FragA到顶部并被onCreateView()称为.现在我FragA处于一个特定的状态,然后FragB被推到它之上.

我的问题是如何恢复FragA到以前的状态?有没有办法保存状态(比如说在Bundle中),如果有,那么我应该覆盖哪种方法?

android android-fragments

132
推荐指数
7
解决办法
14万
查看次数

片段活动onSaveInstanceState未被调用

我已经看到了一些类似的问题,关于onSaveInstanceState没有被称为Fragments,但在我的情况下Fragment工作正常,这是主要FragmentActivity的麻烦.

相关代码看起来很简单:

public class MyFActivity extends FragmentActivity implements ActionBar.TabListener { 
    String[] allValues; // data to save

    @Override
    protected void onSaveInstanceState (Bundle outState) {
        Log.d("putting it!", allValues.toString());
        outState.putStringArray("allValues", allValues);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null) {
            allValues = savedInstanceState.getStringArray("allValues");
            Log.d("getting it!", allValues.toString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

暂停活动时(使用后退按钮),onSaveInstanceState永远不会调用,因此,在恢复应用程序时savedInstanceState始终nullonCreate方法内.我尝试添加这样的块:

@Override
public void onPause() {
    super.onPause();
    onSaveInstanceState(new Bundle());      
}
Run Code Online (Sandbox Code Playgroud)

这是在/sf/answers/993664171/中建议的,但是当 …

android android-fragmentactivity

19
推荐指数
2
解决办法
2万
查看次数

onSaveInstanceState和Fragments?

如何获取片段来保存它的状态?我已经尝试了一切,但没有运气,没有任何工作.

我试过添加:

public void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
   myWebView.saveState(outState);
   Log.w("///////", "onSaveInstanceState");

}
Run Code Online (Sandbox Code Playgroud)

但这永远不会被称为.

有任何想法吗?


我现在正在尝试恢复Web视图的状态:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

     View mainView = (View) inflater.inflate(R.layout.frag_b, container, false);
     myWebView = (WebView) mainView.findViewById(R.id.webviewtest);
     myWebView.setWebViewClient(new MyWebViewClient());
     myWebView.getSettings().setPluginsEnabled(true);
     myWebView.getSettings().setBuiltInZoomControls(false); 
     myWebView.getSettings().setSupportZoom(false);
     myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);   
     myWebView.getSettings().setAllowFileAccess(true); 
     myWebView.getSettings().setDomStorageEnabled(true);
     myWebView.loadUrl("http://www.google.com");   
     myWebView.setId(1);
     myWebView.restoreState(savedInstanceState);
     Log.w("///////", "onCreateView");

    return mainView;
}
Run Code Online (Sandbox Code Playgroud)

但上述不起作用,任何想法?

android

11
推荐指数
1
解决办法
2万
查看次数

分离片段不会触发onSaveInstanceState()

我的Android应用程序有一个ActionBar变化,Fragment占用了一定的FrameLayout.当我onSaveInstanceState更改选项卡时,我试图用来保存片段的状态,以便可以恢复它onCreateView.

问题是,onSaveInstanceState永远不会被称为.在FragmentonDestroyViewonCreateView方法的调用,但Bundle供给onCreateView仍然是零.

有人可以向我解释onSaveInstanceState实际调用的时间,如何确保在切换选项卡时调用它,或者在Fragment分离和重新连接时保存和恢复状态的最佳实践?

分段:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.event_log, container, false);

    // Retrieve saved state
    if (savedInstanceState != null){
        System.out.println("log retrieved");
    } else {
        System.out.println("log null");
    }

    return view;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    System.out.println("log saved");
    super.onSaveInstanceState(outState);
    // more code
}
Run Code Online (Sandbox Code Playgroud)

活动:

/** …
Run Code Online (Sandbox Code Playgroud)

android save detach fragment

6
推荐指数
1
解决办法
8638
查看次数

FragmentManager.getFragment()NullPointerException

我正在使用支持库v4并且无法保存片段的状态.

@Override
protected void onSaveInstanceState(Bundle outState)
{
    ...
    if(mFragment != null)
        getSupportFragmentManager().putFragment(outState, "frag", mFragment);
    ...
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
    ...
    if(savedInstanceState != null)
    {
        //Here I get NullPointerException
        getSupportFragmentManager().getFragment(savedInstanceState, "frag");
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我调用getFragment()时抛出NullPointerException(savedInstanceState包含带有"frag"的条目).

这是logcat输出的一部分:

04-18 00:10:56.719: E/AndroidRuntime(14644): Caused by: java.lang.NullPointerException
04-18 00:10:56.719: E/AndroidRuntime(14644):    at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569)
Run Code Online (Sandbox Code Playgroud)

我也试图调用getFragments()哪个返回null.这在我看来很奇怪.

我将不胜感激任何帮助!


解:

我忘了使用super.onSaveInstanceState(outState);里面的onCreate方法.

android savestate android-fragments android-fragmentactivity android-support-library

5
推荐指数
1
解决办法
5614
查看次数