在 activity_main 以外的其他活动中添加操作栏

Posted

技术标签:

【中文标题】在 activity_main 以外的其他活动中添加操作栏【英文标题】:Adding an action bar in other activities than activity_main 【发布时间】:2016-05-08 03:14:19 【问题描述】:

我正在开发一个包含一些活动的简单应用程序。所以当我启动应用程序并进入我的 MainActivity 时,我有我的操作栏,一切都很好。该 MainActivity 中有 2 个按钮,单击它们可将您带到其他活动。我想要做的是我想为那些次要活动实现一个操作栏。我已经尝试了所有可以在 google 或 youtube 上找到的东西,但没有任何效果。希望你们能帮助我。我希望将 BACK 按钮放在该操作栏上,这将带我回到 activity_main 但当然我首先需要一个操作栏。我将为您提供我的一项次要活动的代码,以便您可以建议我添加什么。

牛顿活动

public class NewtonScreen extends Activity

     private Button theAnswerButton, theHintButton, theSuckButton;

@Override
  protected void onCreate(Bundle savedInstanceState)

     super.onCreate(savedInstanceState);

     setContentView(R.layout.newton_layout);

     theAnswerButton = (Button) findViewById(R.id.answer_button);
     theHintButton = (Button) findViewById(R.id.hint_button);
     theSuckButton = (Button)findViewById(R.id.suck_at_physics_button);




/**@Override
     public boolean onCreateOptionsMenu(Menu menu) 
     //Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.newton_menu, menu);
          return true;


@Override
  public boolean onOptionsItemSelected(MenuItem item) 
     // Handle action bar item clicks here. The action bar will
     // automatically handle clicks on the Home/Up button, so long
     // as you specify a parent activity in androidManifest.xml.
     int id = item.getItemId();

     //noinspection SimplifiableIfStatement
     if (id == R.id.action_settings) 
         return true;
    

      return super.onOptionsItemSelected(item);
**/

// Some other methods that are not important for this issue

如您所见,我尝试使用这 2 个 Override 方法,甚至创建了一个 newton_menu 布局,但它似乎不起作用。

牛顿菜单

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".NewtonScreen">

<item 
    android:id="@+id/newton_action_exit"
    android:title="@string/action_exit"
    android:orderInCategory="101"
    app:showAsAction="ifRoom"
    />

【问题讨论】:

【参考方案1】:

extends Activity 更改为 extend AppCompatActivity

在 oncreate 中调用此代码

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

还有这段代码

    @Override
public boolean onOptionsItemSelected(int featureId, MenuItem item) 
     int itemId = item.getItemId();
     if(itemId == android.R.id.home)
         finish();
     
     return true;

【讨论】:

当我输入这段代码时 getSupportActionBar().setDisplayHomeAsUpEnabled(true);它给了我一个错误 java.lang.NullPointerException 并且 Override 方法给出了一个错误,它没有覆盖超类中的任何方法:/【参考方案2】:

我认为您的项目或您的第二类不支持操作栏。您应该在 style.xml 文件中更改它并确保第二类应用它。 示例 style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
</style>

【讨论】:

添加:您使用 ActionBarActivity 或 AppCompatActivity 扩展类。【参考方案3】:

只需使用 Mainactivity 扩展您的所有活动(可以将其视为具有操作栏的基本活动)。

例如:让你的 MainActivity 扩展 AppCompatActivity

并让其他活动像 MainActivity 一样扩展

SecondActivity 扩展 MainActivity。

希望这能解决您的问题。

【讨论】:

以上是关于在 activity_main 以外的其他活动中添加操作栏的主要内容,如果未能解决你的问题,请参考以下文章

如何使用导航从其他片段隐藏主机活动中的视图

如何通过远距离以外的其他方式订购rails geocoder gem的结果

从另一个片段的其他视图控制片段的视图

使用活动设备以外的“查看为”设备会导致布局问题

知晓当前活动

Android井字游戏开发开局走法