在MvxPreferenceFragmentCompat中添加工具栏

时间:2016-06-21 14:26:41

标签: xamarin xamarin.android mvvmcross

我在使用MvxPreferenceFragmentCompat创建设置页面时遇到了一些问题。我已经显示了首选项视图,但我无法将工具栏包含在同一页面中。

我正在使用XPlatformMenus示例来创建我的应用。 我已经尝试了许多解决方案 attempt 1attempt 2,但没有成功。

这是我目前的代码:

SettingsFragment.cs

issue.fields.attachment

fragment_settings.xml

[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame)]
[Register("myapp.droid.fragments.SettingsFragment")]
public class SettingsFragment : BasePreferenceFragment<SettingsViewModel>
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.showHamburgerMenu = true;
        return base.OnCreateView(inflater, container, savedInstanceState);
    }

    public override void OnCreatePreferences(Bundle savedInstanceState, string rootKey)
    {
        this.AddPreferencesFromResource(FragmentId);
    }

    protected override int FragmentId
    {
        get
        {
            return Resource.Layout.fragment_settings;
        }
    }
}

BasePreferenceFragment

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
  android:key="pref_sync"
  android:title="Title sample"
  android:summary="Here is the checkbox summary"
  android:defaultValue="true" />
</PreferenceScreen>

toolbar_actionbar.xml

public abstract class BasePreferenceFragment : MvxPreferenceFragmentCompat
{
    protected Toolbar _toolbar;
    protected MvxActionBarDrawerToggle _drawerToggle;
    /// <summary>
    /// If true show the hamburger menu
    /// </summary>
    protected bool showHamburgerMenu = false;

    protected BasePreferenceFragment()
    {
        RetainInstance = true;
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = base.OnCreateView(inflater, container, savedInstanceState);

        _toolbar = view.FindViewById<Toolbar>(Resource.Id.toolbar);
        if (_toolbar != null)
        {
            ((MainActivity)Activity).SetSupportActionBar(_toolbar);
            if (showHamburgerMenu)
            {
                ((MainActivity)Activity).SupportActionBar.SetDisplayHomeAsUpEnabled(true);

                _drawerToggle = new MvxActionBarDrawerToggle(
                    Activity,                               // host Activity
                    ((MainActivity)Activity).DrawerLayout,  // DrawerLayout object
                    _toolbar,                               // nav drawer icon to replace 'Up' caret
                    Resource.String.drawer_open,            // "open drawer" description
                    Resource.String.drawer_close            // "close drawer" description
                );
                _drawerToggle.DrawerOpened += (object sender, ActionBarDrawerEventArgs e) =>
                {
                    if (Activity != null)
                        ((MainActivity)Activity).HideSoftKeyboard();
                };
                ((MainActivity)Activity).DrawerLayout.AddDrawerListener(_drawerToggle);
            }
        }

        return view;
    }

    protected abstract int FragmentId { get; }

    public override void OnConfigurationChanged(Configuration newConfig)
    {
        base.OnConfigurationChanged(newConfig);
        if (_toolbar != null && null != _drawerToggle)
        {
            _drawerToggle.OnConfigurationChanged(newConfig);
        }
    }

    public override void OnActivityCreated(Bundle savedInstanceState)
    {
        base.OnActivityCreated(savedInstanceState);
        if (_toolbar != null && null != _drawerToggle)
        {
            _drawerToggle.SyncState();
        }
    }
}

public abstract class BasePreferenceFragment<TViewModel> : BasePreferenceFragment where TViewModel : class, IMvxViewModel
{
    public new TViewModel ViewModel
    {
        get { return (TViewModel)base.ViewModel; }
        set { base.ViewModel = value; }
    }
}

fragment_setting_screen.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/appbar"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>

我做错了什么?有什么想法吗?

0 个答案:

没有答案