【问题标题】:Button click throws nullpointerexception in fragment按钮单击在片段中引发 nullpointerexception
【发布时间】:2014-09-23 16:47:39
【问题描述】:

当我在片段视图中按下按钮时出现错误。该按钮已呈现,但是当我单击它时,出现以下错误:

09-23 18:29:01.242 9332-9332/? E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException 在 foit.startingpoint.nl.androiddrawer.LocatiesFragment.onCreateView(LocatiesFragment.java:28)

     @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Button button = (Button) getView().findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent myIntent = new Intent(LocatiesFragment.this.getActivity(), SecondActivity.class);
            startActivity(myIntent);            }
    });
    
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_locaties, container, false);
}

【问题讨论】:

  • xml 中的button 是否在您的Activity 或fragment_locaties.xml 中膨胀?
  • fragment_locaties.xml

标签: android android-intent android-activity android-fragments


【解决方案1】:

你的初始化不正确,你必须按照以下代码:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

           View view = inflater.inflate(R.layout.fragment_locaties, container, false);
           Button button = (Button) view.findViewById(R.id.button);
           button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                  Intent myIntent = new Intent(getActivity(),SecondActivity.class);
                        startActivity(myIntent); 
             }
    });

    return view;
}

因为onCreateView 未完成getView 在您的代码中为空,因此您必须创建一个视图并使用它。

【讨论】:

  • 这就是我在#onCreateView 中膨胀布局并在#onViewCreated 中设置视图的原因。
  • 这个解决方案有一个问题,那就是当您在onCreateView 和onViewCreated 中的其他代码中膨胀视图时,您必须在片段中保存一个视图实例,但您的解决方案非常好
  • 有人可以向我解释一下这是什么以及问题所在吗?我是初学者=(
  • 我认为最好的帮助是显示开发人员站点,但对于一个 guid,片段已附加到活动,因此直到 onCreateView 布局尚未初始化,因此您不能使用 getView 方法,因为视图尚未尚未初始化,因此要解决此问题,您必须在 View 上创建并膨胀您的布局,然后使用它来查找您的视图(正如我在代码中使用的那样),另一种方法是使用 onViewCreated() 而不是 onCreateView,所以您只需膨胀您在onCreateView 中的布局并在onViewCreated 中初始化您的小部件和其他东西,两种方式都有效,但第一种方式更简单。
【解决方案2】:

在查找按钮 ID 时,您不能简单地从任何地方获取视图()。第一个布局被夸大了。

View view = inflater.inflate(R.layout.fragment_locaties, container, false);
Button button = (Button) view.findViewById(R.id.button);
...
return view;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 2018-04-04
    • 2015-12-20
    • 2018-02-18
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多