- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下示例 Android-Support/Fragments对于 MvvmCross 并尝试重构我自己的应用程序以将 AppBar 和 Toolbar 资源定义移动到 fragment 。我在 fragment 上调用 SetSupportActionbar 时遇到问题,而该调用过去在 Activity 上运行良好。这是重构后的代码:
activity_main.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- Actual content of the screen -->
<FrameLayout
android:id="@+id/main_content_frame"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:layout_below="@+id/toolbar"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
主 Activity .cs
using Android.App;
using Android.OS;
using Android.Content.PM;
using MvvmCross.Droid.Support.V7.AppCompat;
using Mobile.Core.ViewModels;
namespace Mobile.Droid.Activities
{
[Activity(
Label = "@string/applicationName",
Icon = "@drawable/ic_icon",
Theme = "@style/AppTheme.Default",
LaunchMode = LaunchMode.SingleTop,
ScreenOrientation = ScreenOrientation.Portrait,
Name = "droid.mobile.activities.MainActivity")]
public class MainActivity : MvxAppCompatActivity<MainViewModel>
{
...
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
ViewModel.ShowLists();
}
....
}
}
fragment 列表.axml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/list_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.design.widget.AppBarLayout
android:id="@+id/main_app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/main_tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.ToolBar"
app:layout_scrollFlags="scroll|enterAlways" />
</android.support.design.widget.AppBarLayout>
<MvvmCross.Droid.Support.V4.MvxSwipeRefreshLayout
android:id="@+id/listsRefresher"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:MvxBind="Refreshing IsLoading; RefreshCommand ReloadCommand">
<MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView
android:id="@+id/listsRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:MvxItemTemplate="@layout/item_list"
app:MvxBind="ItemsSource Lists; ItemClick ShowListItemsCommand" />
</MvvmCross.Droid.Support.V4.MvxSwipeRefreshLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="@dimen/margin_medium"
android:src="@drawable/ic_add_white_24dp"
android:visibility="invisible"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_anchor="@id/main_content_frame"
app:layout_anchorGravity="bottom|right|end" />
</RelativeLayout>
ListsFragment.cs
using Android.OS;
using Android.Views;
using MvvmCross.Droid.Support.V4;
using MvvmCross.Binding.Droid.BindingContext;
using Android.Runtime;
using List.Mobile.Droid.Common;
using MvvmCross.Binding.BindingContext;
using Android.Support.V4.View;
using Android.Widget;
using List.Mobile.Core.ViewModels;
using MvvmCross.Droid.Support.V7.RecyclerView;
using Android.Support.V7.Widget;
using MvvmCross.Droid.Views.Attributes;
namespace List.Mobile.Droid.Views
{
[MvxFragmentPresentation(typeof(MainViewModel), Resource.Id.main_content_frame, true)]
[Register("list.mobile.droid.views.ListsFragment")]
public class ListsFragment : BaseFragment<ListsViewModel>, ActionMode.ICallback
{
...
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
...
}
}
}
基础 fragment .cs
using MvvmCross.Droid.Support.V4;
using List.Mobile.Droid.Common;
using MvvmCross.Core.ViewModels;
using Android.OS;
using Android.Views;
using Android.Support.Design.Widget;
using Android.Support.V7.Widget;
using Android.Support.V7.App;
namespace List.Mobile.Droid.Views
{
public abstract class BaseFragment<T> : MvxFragment<T> where T : MvxViewModel
{
protected AppBarLayout AppBar { get; set; }
protected FloatingActionButton FAB { get; set; }
protected Toolbar Toolbar { get; set; }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = base.OnCreateView(inflater, container, savedInstanceState);
AppBar = Activity.FindViewById<AppBarLayout>(Resource.Id.main_app_bar);
FAB = Activity.FindViewById<FloatingActionButton>(Resource.Id.fab);
Toolbar = Activity.FindViewById<Toolbar>(Resource.Id.main_tool_bar);
AppCompatActivity parentActivity = ((AppCompatActivity)Activity);
parentActivity.SetSupportActionBar(Toolbar);
parentActivity.SupportActionBar.SetDisplayHomeAsUpEnabled(false);
parentActivity.SupportActionBar.SetHomeButtonEnabled(false);
return view;
}
}
}
问题出在线路上:
parentActivity.SetSupportActionBar(Toolbar);
因为它似乎没有设置操作栏,随后对 parentActivity.SupportActionBar 的调用失败并出现 NullReferenceException。有任何想法吗?当 Appbar 和 Toolbar 是在 Activity 而不是 Fragment 上定义时,请不要这样做。
最佳答案
如果您看不到答案,请休息一下,喝杯咖啡,答案就会浮现。由于 AppBar 和工具栏是在 fragment XML 中定义的,因此我无法调用 Activity.FindViewById() 来对其进行扩充。同样适用于上述代码中的 AppBar 和 FAB。一旦我将代码重构得更接近我正在关注的上述示例(子类 Fragment 提供了 fragment 布局的 ResourceId 并且基类对其进行了扩展),我就能够更改调用:
AppBar = Activity.FindViewById<AppBarLayout>(Resource.Id.main_app_bar);
Fab = Activity.FindViewById<FloatingActionButton>(Resource.Id.fab);
Toolbar = Activity.FindViewById<Toolbar>(Resource.Id.main_tool_bar);
到:
AppBar = FragmentView.FindViewById<AppBarLayout>(Resource.Id.main_app_bar);
Fab = FragmentView.FindViewById<FloatingActionButton>(Resource.Id.fab);
Toolbar = FragmentView.FindViewById<Toolbar>(Resource.Id.main_tool_bar);
哪里:
FragmentView = this.BindingInflate(FragmentResourceId, null);
一切开始正常工作。
关于android - Fragment 上的 SetSupportActionBar 未设置 SupportActionBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46857163/
我尝试按照在操作栏上方但在状态栏下方显示抽屉的步骤进行操作。在这里找到的步骤: display over the ActionBar/Toolbar and under the status bar?
我正在尝试在我的应用程序中使用工具栏,为此,我创建了一个 xml 文件名我的 Action 栏 这是我的 MainActivity 代码 public class MainActivit
我是 android 的新手,我正在关注 Material Design Toolbar 的教程: http://www.android4devs.com/2014/12/how-to-make-ma
随着新的 Toolbar widget 的引入和 AppCompat (android.support.v7.widget.Toolbar) 版本可用,是否需要再调用 setSupportAction
我正在学习有关如何获取工具栏而不是操作栏的教程。 本教程说我必须将 mainActivity 扩展为 ActionbarActivity,但此类已被弃用。我用谷歌搜索了一些,发现可以使用 AppCom
我正在尝试在 fragment 中添加一个顶部工具栏,其中包含选项菜单。在模拟器上运行它时,工具栏不会显示。 我已调用 setSupportActionBar(toolbar),但仍不确定出了什么问题
我正在尝试在我的 FragmentActivity 上创建自定义 Toolbar 但在我启动该应用程序时它在这条 channel 上崩溃了: setSupportActionBar(工具栏); 我没有
您好,我想知道是否有使用 Android 数据绑定(bind)库的此功能的 xml 标记,或者如何在没有 findViewById() 方法的情况下实现此功能 谢谢 最佳答案 您可以访问工具栏的实例u
我有以下设置工具栏的代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved
如何在 FragmentActivity 中访问 setSupportActionBar(Toolbar toolbar)?我无法在 FragmentActivity 中访问它 toolbar = (
如何调用setSupportActionBar在 kotlin 语言的 fragment 中。 我有一个带有抽屉导航的 mainActivity。当我单击抽屉导航的第一项时,它应该会打开一个 note
好吧,问题是,如果我从 add_event Activity 中删除 setSupportActionBar(toolbar) ,它就会起作用,add_event Activity 将打开并在屏幕上显
是否可以在 TabActivity 中使用 setSupportActionBar()?无法使用 AppCompatActivity 进行扩展... public class TabHost exte
我正在尝试使用 Android Studio 制作完整的 header 应用程序。我有 MainActivity.java、navheader.xml、cardview.xml、activity_de
所以我想在应用程序中将工具栏用作操作栏。我正在尝试在一个 fragment 中使用 setSupportActionBar() 方法,该 fragment 由扩展类的 Activity 托管,该类扩展
我正在尝试按照以下教程创建选项卡 View 布局:http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tab
我需要在我无法使用的 fragment 中使用 setSupportActionBar 我也无法使用 setContentView 请帮助它也提前谢谢你给出了相关代码 public class Stu
This question already has answers here: setsupportactionbar() throws error (6个答案) 2年前关闭。 我使用的是Androi
大家好,我已经面临这个问题几天了。我已经用谷歌搜索和 stackoverflowed 但没有人对这个问题有精确的解决方案。 我是 Android Material 设计的初学者。我正在尝试为我的应用程
以下示例 Android-Support/Fragments对于 MvvmCross 并尝试重构我自己的应用程序以将 AppBar 和 Toolbar 资源定义移动到 fragment 。我在 fra
我是一名优秀的程序员,十分优秀!