【问题标题】:Set up toolbar as actionbar in fragment将工具栏设置为片段中的操作栏
【发布时间】:2015-01-17 18:12:21
【问题描述】:

我想将我的工具栏设置为操作栏,但由于您的工具栏是一个布局元素,它必须在您的布局中。现在我的布局在我的片段中。

我在布局中添加了工具栏,并在我的片段中调用它:

//Toolbar
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

它之所以有效,是因为我可以设置标题等,但现在我希望它作为操作栏做出反应,因为我实际上想要拥有它。 setDisplayHomeAsUpEnabled(true)

为此,我必须将工具栏更改为操作栏:

setSupportActionBar(toolbar);

这在我的片段中不起作用......

谁能帮我让我的工具栏在片段中用作操作栏。

【问题讨论】:

    标签: java android android-actionbar fragment toolbar


    【解决方案1】:

    现在ActionBarActivity 已被弃用,所以 您需要先将您的活动从getActivity() 转换为AppCompatActivity。这是一个例子:

    ((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle();
    

    你必须投它的原因是因为getActivity()返回一个FragmentActivity,你需要一个AppCompatActivity

    【讨论】:

    • 由于某种原因,这不是在片段中初始化工具栏
    【解决方案2】:

    尝试:

     ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
    

    【讨论】:

    • 一款活动应用怎么样?
    【解决方案3】:

    ActionBar 是一个 Activity 属性。如果您想将给定片段的工具栏设置为所属 Activity 的 ActionBar,则获取拥有该片段的 Activity (Fragment.getActivity()) 并设置其 ActionBar 属性。

    然后,在将工具栏设置为 ActionBar 后,使用您在 ActionBar 上提到的相同的 setDisplayHomeAsUpEnabled 方法来获取后退/向上按钮。

    如果您的应用在该 Activity 中有多个片段,您显然必须谨慎管理。

    【讨论】:

    • 我只想用完导航,所以我认为这就是为什么我需要一个由我的工具栏组成的操作栏。我该如何设置 ActionBar 属性,你能给我举个例子吗?
    • 为什么不把你的工具栏放在你的主要活动中,这样你就可以使用 setSupportActionBar 方法
    • 因为我使用片段并且我在片段中而不是在活动中设置布局。所以我的活动无法检测到我的片段中的工具栏,因为片段是在活动查找工具栏后加载的
    • 在将工具栏设置为 ActionBar 后,只需使用您提到的在 ActionBar 上开始的相同 setDisplayHomeAsUpEnabled 方法(刚刚尝试过,效果很好)。也更新了答案。
    【解决方案4】:

    使用

    ((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title");
    

    【讨论】:

    • 这将返回 NullPointerException。
    • 需要先设置好再获取。 (押韵)
    【解决方案5】:

    如果你使用 Kotlin,试试这个:

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, state: Bundle?): View? { 
            (activity as AppCompatActivity).setSupportActionBar(your_toolbar)
            setHasOptionsMenu(true)
    
            return inflater.inflate(R.layout.your_layout, container, false)
    }
    
    
    override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
            inflater?.inflate(R.menu.your_menu, menu)
    }
    

    【讨论】:

      【解决方案6】:

      假设持有片段的 Activity 是 MainActivity。

      MainActivity main = (MainActivity)getActivity();
      //You can access all public variable and methods of MainActivity.
      //simply call 
      main.setSupportActionBar(toolbar)
      main.getSupportActionBar.setTitle("title");
      

      【讨论】:

      • java.lang.IllegalStateException: 这个 Activity 已经有一个由窗口装饰提供的操作栏。不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。
      猜你喜欢
      • 2017-01-23
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多