0

何日も検索してさまざまなオプションを試してみましたが、まだ答えが見つかりません。

ActionBarSherlock の使用 ActionBar.ITabListener を実装する基本的な SherlockFragmentActivity があります。

フラグメントには、単純な Web ビューが含まれています。構成の変更中 (画面の向きの変更中) savedInstanceState の onCreateView パラメータは常に null であるため、RestoreState.

うまくいけば、より多くの助けが得られるように、これをできるだけシンプルにしました。だから名前はばかげています。

TabFragWebActivity

public class TabFragWebActivity : SherlockFragmentActivity, Com.Actionbarsherlock.App.ActionBar.ITabListener
{

    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
        SetContentView (Resource.Layout.fragment_tabs);
        LoadTabs();
    }

    public void LoadTabs ()
    {
        this.RunOnUiThread (() => {
            SupportActionBar.NavigationMode = Com.Actionbarsherlock.App.ActionBar.NavigationModeTabs;

            var tab = SupportActionBar.NewTab ();
            tab.SetContentDescription ("desc 1");
            tab.SetText ("tab 1");
            tab.SetTag ("tab1id");
            tab.SetTabListener (this);

            SupportActionBar.AddTab (tab);  


            tab = SupportActionBar.NewTab ();
            tab.SetContentDescription ("desc 2");
            tab.SetText ("tab 2");
            tab.SetTag ("tab2id");
            tab.SetTabListener (this);

            SupportActionBar.AddTab (tab);  

        });
    }

    #region ITabListener implementation

    public void OnTabReselected (Com.Actionbarsherlock.App.ActionBar.Tab tab, Android.Support.V4.App.FragmentTransaction transAction)
    {
        //throw new NotImplementedException ();
    }

    public void OnTabSelected (Com.Actionbarsherlock.App.ActionBar.Tab tab, Android.Support.V4.App.FragmentTransaction transAction)
    {
        string tag = tab.Tag.ToString();

        var fragment = SupportFragmentManager.FindFragmentByTag (tag);
        if (fragment != null) {
            transAction.Show(fragment);
            return;
        }

        fragment = new WebFragment("http://www.google.com");
        transAction.Add(Resource.Id.realtabcontent, fragment, tag);
    }

    public void OnTabUnselected (Com.Actionbarsherlock.App.ActionBar.Tab tab, Android.Support.V4.App.FragmentTransaction transAction)
    {
        string tag = tab.Tag.ToString();

        HideFragment(transAction, tag);
    }

    public void HideFragment (Android.Support.V4.App.FragmentTransaction transAction, string tag)
    {
        Android.Support.V4.App.Fragment fragment;
        fragment = SupportFragmentManager.FindFragmentByTag (tag);
        if (fragment != null) {
            transAction.Hide (fragment);
        }
    }

    #endregion

}

ウェブフラグメント

    public class WebFragment : SherlockFragment
{
    string _webURL;
    WebView _webview;
    Activity _activity;

    public WebFragment (string webURL)
    {
        _webURL = webURL;
    }

    public override void OnAttach (Android.App.Activity activity)
    {
        _activity = activity;
        base.OnAttach (activity);
    }

    public override void OnActivityCreated (Bundle savedInstanceState)
    {
        base.OnActivityCreated (savedInstanceState);
        RetainInstance = true;
        if (_webview == null)
            initUI();
    }

    public void initUI ()
    {
        _webview = (WebView)_activity.FindViewById (Resource.Id.webView);   
        if (_webview != null) {
            _webview.SetWebChromeClient (new ROSWebChromeClient ());
            _webview.SetWebViewClient (new ROSWebViewClient ());
            _webview.Settings.JavaScriptEnabled = true;
            _webview.LoadUrl (_webURL);
        }
    }

    public override Android.Views.View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var mainView = (View)inflater.Inflate (Resource.Layout.fragment_web, container, false);

        //the savedInstanceState is always null
        if (_webview != null) {
            _webview.RestoreState (savedInstanceState);
        }

        return mainView;
    }
}

単純な間違いをしていることを願っています。ただ、それが何かはわかりません。

4

1 に答える 1

-1

上記の Jake の変更を適用し、Google が修正をリリースするまで使用する新しいサポート ライブラリをコンパイルしました。

http://ara.sh/android/android-support-v4.jar

この jar をプロジェクトから、およびアクション バーの sherlock ライブラリ プロジェクトから置き換えます。

于 2012-12-21T17:48:35.917 に答える