gpt4 book ai didi

android - 抽屉导航 fragment 不断返回 null

转载 作者:行者123 更新时间:2023-11-30 01:52:19 25 4
gpt4 key购买 nike

我在配置我的应用程序以使其不会在启动时崩溃时遇到了问题。我创建了一些 Activity 并制作了一个抽屉导航 fragment ,我将其布局存储在一个单独的 .xml 文件中,并将其包含在每个 Activity 的布局中。

这一直有效,直到我为一个不是启动器 Activity 的 Activity 尝试了一个不同的 .xml 文件。 gradle 构建中存在一个错误,因此加载到手机上的应用程序是以前的版本(由于某种原因,我所做的更改未包含在构建中)。这种情况经常发生在我身上(在 Android Studio 中),我的解决方法是从我的手机上卸载该应用程序,然后通过在 Android Studio 中运行它来重新安装它。但是在这样做之后,我得到了一些奇怪的结果。现在我什至无法启动我的 Android 应用程序。

当代码尝试执行时出现空指针错误

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()' on a null object reference

如果用户是第一次打开应用程序,它崩溃的那一行是它试图打开抽屉的那一行,它似乎是 containerView 正在变为空:

public void setUp(int fragmentID, final DrawerLayout drawerLayout, Toolbar toolbar){
mDrawerLayout = drawerLayout;
containerView = getActivity().findViewById(fragmentID);

if(!mUserLearnedDrawer && !mFromSavedInstanceState){
mDrawerLayout.openDrawer(containerView);
}

}

此设置函数在我的 MainActivity 中调用(在 OnCreate 方法中):

NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.drawer_layout_declared);
drawerFragment.setUp(R.id.drawer_layout_declared, (DrawerLayout) findViewById(R.id.drawer_layout_home), toolbar);

现在我像这样在我的布局文件中包含了抽屉导航。

<include
android:id="@+id/nav_drawer_frag"
layout="@layout/navigation_drawer_declaration"/>

它是 android.support.v4.widget.DrawerLayout 元素的第二个子元素这是 navigation_drawer_declaration.xml 文件的内容。

<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout_declared"
android:name="helloworld.vault101payroll.NavigationDrawerFragment"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer"/>

我相信这是在为 fragmentID 添加抽屉导航时应该引用的内容。

我记录了返回的资源文件的值 2131492942,这是非空布局的整数值吗?

无论如何,我认为这个错误是如何产生的很奇怪,因为我正在处理一段与错误发生的地方完全不相关的代码。我删除了自上次应用程序运行以来我正在处理的文件,但没有任何区别。

非常感谢任何帮助。

编辑:

请注意,我已将 ActionBarDrawerToggle 对象添加到我的 drawerToggle:这是我下面的

containerView = getActivity().findViewById(fragmentID)

线

mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_closed){

@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if(!mUserLearnedDrawer){
mUserLearnedDrawer = true;
saveToPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer + "");
}
getActivity().invalidateOptionsMenu();
}

@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActivity().invalidateOptionsMenu();
}
};
if(!mUserLearnedDrawer && !mFromSavedInstanceState){
mDrawerLayout.openDrawer(containerView);
}
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});

最佳答案

在“containerView = getActivity().findViewById(fragmentID);”下方添加代码这将定义 drawerLayout 的行为。

mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar,
R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!mUserLearnedDrawer) {
mUserLearnedDrawer = true;
saveToPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer + "");
}
getActivity().invalidateOptionsMenu();
}

@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActivity().invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});

关于android - 抽屉导航 fragment 不断返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32838999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com