Ошибка Shwing: попытка вызвать виртуальный метод void androidx.appcompat.app.ActionBar.setDisplayHomeAsUpEnabled (логический) - PullRequest
1 голос
/ 29 марта 2020

Я хочу реализовать кнопку Android ActionBar назад в моей StreamActivity, но я получаю эту ошибку:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.schoolteacher/com.example.schoolteacher.StreamActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference

Я не знаю, почему это не работает, несмотря на то, что я следовал всем инструкциям из документации! плюс, я сделал именно это в других проектах, и он работает.

Вот мой код:

StreamActvivty. java

public class StreamActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_stream);

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

        setSupportActionBar(toolbar);
        ActionBar actionBar= getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true); 

    }

}

стили. xml

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

манифест

<activity android:name=".StreamActivity"
            android:label="@string/stream"
            android:parentActivityName=".ClassActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".ClassActivity" />
        </activity>

Ответы [ 3 ]

1 голос
/ 29 марта 2020

Попробуйте это

Добавьте это в onCreate

 ActionBar actionBar = this.getSupportActionBar();
 if (actionBar != null) {
    actionBar.setDisplayHomeAsUpEnabled(true);
 }

Добавьте это вне onCreate, оно используется для перехода к родительскому действию

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
   if (id == android.R.id.home) {
    NavUtils.navigateUpFromSameTask(this);
}
    return super.onOptionsItemSelected(item);
}

А также установить родительскую активность

  <activity
        android:name=".activity.CreateAccountActivity"
        android:parentActivityName=".activity.LoginActivity" />
0 голосов
/ 29 марта 2020

Есть ли панель инструментов внутри вашего Activity_stream. xml? Также проверьте ваш импорт.

    import androidx.appcompat.app.ActionBar;
    import androidx.appcompat.widget.Toolbar;
0 голосов
/ 29 марта 2020

Чтобы использовать Toolbar в качестве ActionBar, сначала убедитесь, что в ваше приложение добавлена ​​библиотека поддержки AndroidX build.gradle (Module:app) file:

dependencies {
   ...
   implementation 'androidx.appcompat:appcompat:1.0.0'
}

Вы должны отключить тему, предусмотренную для ActionBar , Измените свою тему с styles.xml на:

<resources>
  <!-- Base application theme. -->
  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  </style>
</resources>
...