如何在FragmentActivity上设置工具栏?

14

我想在扩展了FragmentActivity的活动中设置工具栏toolbar。我知道使用setSupportActionBar(toolbar)方法需要扩展AppCompatActivity而不是FragmentActivity,但我重写了AppCompatActivity中被声明为final的onMenuItemSelected(int featureId, MenuItem item)方法,而final方法无法被覆盖。因此,我只能继续扩展FragmentActivity

这是我的代码:

public class MainActivity extends FragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);   -> error is here
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
       // Inflate the menu
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()){
            case R.id.action_search:
                onSearchRequested();
                break;
        }
        return super.onMenuItemSelected(featureId, item);
    }

我看到许多与该问题相关的答案,但每个人都说要扩展 AppCompatActivity 而不是 FragmentActivity,但我想设置工具栏以及重写 onMenuItemSelected(int featureId, MenuItem item) 方法。

我该怎么办,请帮忙。


4
你尝试过使用 onOptionsItemSelected 吗? - Shvet
1
是的,我明白了,我通过你的建议找到了解决方案。我继承了AppCompatActivity而不是FragmentActivity,并将onMenuItemSelected()方法更改为onOptionsItemSelected()方法。谢谢 :) - Ekta Bhawsar
4个回答

8

当您使用NavigationDrawer时,这个东西非常好用 使用以下代码

 toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

根据不同片段的不同标题,在 onNavigationItemSelected 中设置工具栏标题:
@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.

        sfm = getSupportFragmentManager();
        Fragment fragment = new Fragment();
        int id = item.getItemId();

        if (id == R.id.nav_id) {
            fragment = new YourFragment();
            toolbar.setTitle("SET TOOLBAR NAME");
        }else if (id == R.id.nav_id2) {
            fragment = new YourFragment();
            toolbar.setTitle("SET TOOLBAR NAME");
        } 

对于单个片段,首先按照以下方式自定义您的style.xml

<style name="YourStyleName" parent="Theme.AppCompat.Light.DarkActionBar">
// ToDo as you want to do or as per your requirement

</style>

然后将其应用于您的自定义 工具栏

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/YourStyleName" >

  // ...........


</android.support.v7.widget.Toolbar>

1
你可以创建自己的工具栏:
首先将主题设置为扩展“Theme.AppCompat.Light.NoActionBar”。
<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->

</style>

记得应用主题:
@Override
protected void onCreate(Bundle savedInstanceState) {
    this.setTheme(R.style.style_1);
    // ...
}

然后在您的Activity的xml中,您可以设置自己的自定义toolbar

<include layout="@layout/my_toolbar"/>

其中 @layout/my_toolbar 可能长这样:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/toolbar_height"
    app:contentInsetStart="0dp"
    app:layout_collapseParallaxMultiplier="1.0">

    <!-- insert your views here -->
</android.support.v7.widget.Toolbar>

0
First set style as  
<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->

</style>
then

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle("Home");

0
你应该将你的Activity从AppCompatActivity继承,因为它包括对Fragments和Toolbar的支持。 然后重写onCreateOptionsMenu()和onOptionsItemSelected()方法。 你不应该重写onMenuItemSelected()方法。
public class MainActivity extends AppCompatActivity { ...

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
    ....


    ....
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      ...
         ...
    }


   @Override
   public boolean onOptionsItemSelected(MenuItem item) {

   ...
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接