Android 按钮单击片段中的侦听器。安卓工作室

Android 按钮单击片段中的侦听器。安卓工作室,android,button,fragment,Android,Button,Fragment,我在尝试在片段中实现按钮单击侦听器时遇到问题。如果只有一个按钮,我没有问题,但是在片段UI中有3个按钮 这就是我得到的: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 代码,我把它作为一个公

我在尝试在片段中实现按钮单击侦听器时遇到问题。如果只有一个按钮,我没有问题,但是在片段UI中有3个按钮

这就是我得到的:

  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
代码,我把它作为一个公共方法

@Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
      // Inflate the layout for this fragment
       View view = inflater.inflate(R.layout.fragment_blank, container, false);


  first=(Button) view.findViewById(R.id.button_first);
  first.setOnClickListener(this);
  second=(Button) view.findViewById(R.id.button_second);
  second.setOnClickListener(this);
  third=(Button) view.findViewById(R.id.button_third);
  third.setOnClickListener(this);

  // Also I tried these ones but its not possible to :
  //first.setOnClickListener((View.OnClickListener) getActivity());
  //second.setOnClickListener((View.OnClickListener) getActivity());
  //third.setOnClickListener((View.OnClickListener) getActivity());


    return view;
}

 @Override
    public void onClick(View view) {

    if (view.getId() == R.id.button_first) {

     //some code here
    }
    if (view.getId() == R.id.button_second) {
        //some code here
    }
    if (view.getId() == R.id.button_third) {
       //some code here
        }
 }
我可以实现一个按钮侦听器,如下所示:

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


  call= (Button) view.findViewById(R.id.button);
  call.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v)
     {
         dialContactPhone("Some phone number");

     }

 });
      return view;
 }

但是我想知道我在第一个代码上犯了什么错误。为什么有一个
null

试试这个:

  • fragmet_blank xml您可以使用相同的id定义3个按钮,比如第一个按钮、第二个按钮、第三个按钮
java代码

public class BlankFragment extends Fragment implements OnClickListener{

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

View v = inflater.inflate(R.layout.fragment_blank, container, false);

Button f = (Button) v.findViewById(R.id.button_first);
Button s = (Button) v.findViewById(R.id.button_second);
Button t = (Button) v.findViewById(R.id.button_third); 
f.setOnClickListener(this);
s.setOnClickListener(this);
t.setOnClickListener(this);
return v;
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_first:

   //some code here

    break;
}

  case R.id.button_second:

   //some code here

    break;
  }
 case R.id.button_third:

   //some code here

    break;
}
 }
   } 

这对我来说很好。 分别为每个按钮设置单击侦听器

View rootView = inflater.inflate(R.layout.fragment_default, container, false);

        rootView.findViewById(R.id.sell)
            .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Your code
            }
        });
        rootView.findViewById(R.id.buy)
            .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Your Code
            }

        });
        rootView.findViewById(R.id.bookbuddy)
            .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Your Code
            }
        });
        rootView.findViewById(R.id.listing)
            .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Your Code
            }
        });

return rootView;

在第一个示例中,您没有提供片段类代码,但由于您使用的是
.setOnClickListener(this)
,并且在代码中的该点处出现错误,因此我假设您没有在类中实现
OnClickListener
。如果使用“this”来设置侦听器,并且没有在类中实现
OnClickListener
,则setOnClickListener()无法找到任何内容。这就是导致
NullPointerException
的原因

如果您想使用“this”来设置侦听器,并使用onClick(View-View)方法来管理单击,那么您的类必须实现OnClickListener

示例:

public class MyFragmentClass extends Fragment implements OnClickListener {
    // You can use "this" for .setOnClickListener() in this class
}

您是否声明了您的按钮?似乎至少有一个
button\u first
button\u second
button\u third
不在
fragment\u blank
布局中。是的,它们在xml布局中定义了相应的id。我总是将xml项id复制到findViewById。我不知道发生了什么,因为这是一个简单的代码。你确定那些
按钮
完全在
fragment_blank
中吗?他们必须在那一个,特别是。如果是这样,您是否有多个版本的
fragment\u blank
——例如,对于不同的方向、不同的Android版本等,其中所有这些
按钮可能不在每个版本中?这将导致编译时错误。OP甚至无法运行应用程序,更不用说运行时出现异常了,请解释一下。你是说我忘了写“扩展片段”吗?(我会马上编辑),或者您指的是其他问题。不,我的意思是,此答案没有解决给定的
异常及其消息中显示的问题。