扩展实现工具栏的基本活动时,工具栏不显示在活动中



我是一名初学者 Android 开发人员,我一直在努力解决在任何继承基本活动的活动中看不到工具栏的问题。根据其他资源,在不同的活动中使用相同的工具栏。我必须在基本活动中实现它,并在需要使用它的地方继承它。谁能帮我找出问题所在?

样式.xml

<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
<style name="AppTheme" parent="AppBaseTheme">
</style>
</resources>

测验菜单.xml菜单文件夹内

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/contact"
    android:icon="@drawable/ic_contacts_black_24dp"
    android:title="Contact"
    app:showAsAction="ifRoom" />
<item android:id="@+id/language"
    android:title="Language"
    app:showAsAction="never" />
<item android:id="@+id/speech"
    android:title="Speech"
    app:showAsAction="never">
    <munu>
        <item android:id="@+id/subitem1"
            android:title="Sub Item 1"/>
        <item android:id="@+id/subitem2"
            android:title="Sub Item 2"/>
    </munu>
</item>
</menu>

基本活动

public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.quiz_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.contact:
            Toast.makeText(this, "Contact is selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.language:
            Toast.makeText(this, "Language is selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.speech:
            Toast.makeText(this, "Speech is selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.subitem1:
            Toast.makeText(this, "Language is selected", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.subitem2:
            Toast.makeText(this, "Speech is selected", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

欢迎活动(继承基本活动(

public class WelcomeActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
    final Button databaseButton = findViewById(R.id.database);
    databaseButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Code here executes on main thread after user presses button
            Intent databaseIntent = new Intent(WelcomeActivity.this, Questionnaire.class);
            startActivity(databaseIntent);
        }
    });
}

问卷

public class Questionnaire extends BaseActivity {
public Spinner languageSpinner;
public int languageId;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_questionnaire);
    ...
}
}

答案其实很简单。首先在 BaseActivity 类OnCreate()方法中设置 contentview,然后在子类的OnCreate()方法中将视图更改为另一个 xml 文件。

我的建议是,不要在BaseActivity类中实现OnCreate()方法,而是在BaseActivity中实现SetContentView()方法。

简而言之,从 BaseActivity(( 中删除onCreate()方法,并在下面添加setContentView()方法。

@Override
public void setContentView(int layoutResID) {
    super.setContentView(layoutResID);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

PS - 您的quiz_menu.xml文件看起来不像菜单文件。 :) P.P.S - 让我知道它是否有效,或者您是否有麻烦。:)

最新更新