Исключение Java Null Pointer для 'android.view.Window $ Callback android.view.Window.getCallback ()'

Я пытался добавить сворачивающуюся панель инструментов к фрагменту, но приложение вылетало, как только я открывал фрагмент: Это ошибка, которую я получаю:

2018-10-19 18:05:38.950 13301-13301/io.github.davidwickerhf.diceroller E/AndroidRuntime: FATAL EXCEPTION: main
Process: io.github.davidwickerhf.diceroller, PID: 13301
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
    at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:249)
    at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:182)
    at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:520)
    at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
    at io.github.davidwickerhf.diceroller.ProfileFragment.onCreateView(ProfileFragment.java:36)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
    at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
    at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
    at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
    at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
    at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
    at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
    at android.os.Handler.handleCallback(Handler.java:809)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:166)
    at android.app.ActivityThread.main(ActivityThread.java:7436)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)

Фрагмент Java:

public class ProfileFragment extends Fragment {

    private MainActivity mMainActivity;
    private SettingsViewModel settingsViewModel;
    private SettingAdapter adapter;
    private CoordinatorLayout coordinatorLayout;
    private View fragmentView;

    private TabLayout mTabLayout;
    private ViewPager mViewPager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        fragmentView = inflater.inflate(R.layout.fragment_profile, container, false);

        mMainActivity = new MainActivity();

        androidx.appcompat.widget.Toolbar mToolbar = fragmentView.findViewById(R.id.profile_toolbar);
        mMainActivity.setSupportActionBar(mToolbar);

        mViewPager = (ViewPager) fragmentView.findViewById(R.id.viewpager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(mMainActivity.getSupportFragmentManager());
        adapter.AddFragment(new ProfileInfoFragment(), "Profile");
        adapter.AddFragment(new ProfileMessagingFragment(), "Messages");
        mViewPager.setAdapter(adapter);
        mTabLayout = (TabLayout) fragmentView.findViewById(R.id.tab_layout_profile);
        mTabLayout.setupWithViewPager(mViewPager);

        return fragmentView;
    }
}

Фрагмент XML:

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
xmlns:app = "http://schemas.android.com/apk/res-auto"
tools:context = ".ProfileFragment"
android:orientation = "vertical">

<com.google.android.material.appbar.AppBarLayout
    android:id = "@+id/appBar"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:theme = "@style/AppTheme"
    app:toolbarId = "@id/profile_toolbar">

    <com.google.android.material.appbar.CollapsingToolbarLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:fitsSystemWindows = "true"
        app:contentScrim = "?attr/colorPrimary"
        app:layout_scrollFlags = "scroll|exitUntilCollapsed"
        app:titleEnabled = "false">

        <ImageView
            android:id = "@+id/background_image_Toolbar"
            android:layout_width = "match_parent"
            android:layout_height = "256dp"
            android:fitsSystemWindows = "true"
            android:scaleType = "centerCrop"
            app:layout_collapseMode = "parallax" />

        <androidx.appcompat.widget.Toolbar
            android:layout_marginTop = "24dp"
            android:id = "@+id/profile_toolbar"
            android:layout_width = "match_parent"
            android:layout_height = "?attr/actionBarSize"
            app:layout_collapseMode = "pin"
            app:popupTheme = "@style/AppTheme" />

    </com.google.android.material.appbar.CollapsingToolbarLayout>

    <com.google.android.material.tabs.TabLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        app:tabGravity = "fill"
        app:tabMode = "fixed"
        android:id = "@+id/tab_layout_profile"
        app:tabTextColor = "@color/greyText"
        app:tabIndicatorColor = "@color/greyText"
        android:background = "#fafafa"
        android:elevation = "0dp">

    </com.google.android.material.tabs.TabLayout>

</com.google.android.material.appbar.AppBarLayout>





<androidx.viewpager.widget.ViewPager
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:id = "@+id/viewpager">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent">













    </androidx.constraintlayout.widget.ConstraintLayout>



</androidx.viewpager.widget.ViewPager>

Пожалуйста помоги?

Попробуйте заменить это «mMainActivity = new MainActivity ();» для этого: "mMainActivity = getActivity ()" только для тестов

W0rmH0le 19.10.2018 19:01

Спасибо за помощь, я попробовал ваше предложение, но код не компилируется, потому что с помощью функции getActivity () я возвращаю фрагмент

David Wicker 19.10.2018 20:23

Вы можете сделать это: mMainActivity = (MainActivity) getActivity ();

W0rmH0le 19.10.2018 20:25

@ W0rmH0le Большое спасибо! Это сработало!

David Wicker 19.10.2018 20:29

Отлично. Я отправлю ответ в качестве ответа ... для использования в будущем.

W0rmH0le 19.10.2018 20:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
1 865
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы получаете эту ошибку, потому что создаете экземпляр нового объекта MainActivity:

 mMainActivity = new MainActivity();

В случае Fragments вы можете вызвать в getActivity(), чтобы получить ссылку на деятельность, на которой размещен ваш Fragment. Что-то вроде:

private MainActivity mMainActivity;
....
mMainActivity = (MainActivity) getActivity();

Или вам даже не нужно выполнять приведение к MainActivity, поскольку вы вызываете общий метод (доступен на Activity)

private Activity mMainActivity;
....
mMainActivity = getActivity();

Другие вопросы по теме