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

时间:2018-10-16 22:38:35

标签: 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

代码,我将其作为公共方法

@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

3 个答案:

答案 0 :(得分:0)

尝试

  • fragmet_blank xml,您可以使用相同的ID定义 3个按钮,例如 button_first,button_second,button_third。

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;
}
 }
   } 

答案 1 :(得分:0)

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

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;

答案 2 :(得分:0)

您没有在第一个示例中提供您的片段类代码,但是由于您使用的是.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
}