Android 按钮单击片段中的侦听器。安卓工作室
我在尝试在片段中实现按钮单击侦听器时遇到问题。如果只有一个按钮,我没有问题,但是在片段UI中有3个按钮 这就是我得到的: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 代码,我把它作为一个公
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个按钮,比如第一个按钮、第二个按钮、第三个按钮
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甚至无法运行应用程序,更不用说运行时出现异常了,请解释一下。你是说我忘了写“扩展片段”吗?(我会马上编辑),或者您指的是其他问题。不,我的意思是,此答案没有解决给定的异常及其消息中显示的问题。