尝试设置导航视图侦听器时出现Null Object错误

时间:2016-01-14 04:54:18

标签: android android-fragments

我正在尝试在我的菜单中设置一个点击监听器,它位于片段内的导航视图内部 - 我想在我的片段中设置监听器

我收到错误

"Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.support.design.widget.NavigationView.setNavigationItemSelectedListener(android.support.design.widget.NavigationView$OnNavigationItemSelectedListener)' on a null object reference"

当我尝试运行此代码时

public class FragmentNavigationDrawer extends Fragment implements NavigationView.OnNavigationItemSelectedListener {



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
}

任何人都知道如何解决这个问题?感谢

3 个答案:

答案 0 :(得分:1)

尝试以下代码。用getView()替换getACtivity

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
}

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

 NavigationView navigationView = (NavigationView) getView().findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

}

答案 1 :(得分:1)

检查onCreateView中的这两行:

NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

您获得NullPointerException因为navigationView对象为空。检查您是否为NavigationView提供了有效的ID。检查您的XML部分NavigationView的ID是否与nav_view相同或不同。

答案 2 :(得分:1)

<input class="these" disabled="disabled" value="Lorem ipsum">
<input class="these" disabled="disabled" value="Lorem ipsum">

<input class="notThese" disabled="disabled" value="Lorem ipsum">

这一行是你的问题,你只需要删除它,因为你已经在你的类中实现了它。因此,擦除此行并调用@Override方法

navigationView.setNavigationItemSelectedListener(this);

这将非常有效。