【发布时间】:2018-10-16 22:38:35
【问题描述】:
我在尝试在片段中实现按钮单击侦听器时遇到问题。如果只有一个按钮,我没有问题,但片段 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?
【问题讨论】:
-
你声明你的按钮了吗?
-
看来
button_first、button_second或button_third中的至少一个不在fragment_blank布局中。 -
是的,它们是在 xml 布局中定义的,具有相应的 id。我总是将 xml 项 id 复制到 findViewById。我不知道发生了什么,因为它是一个简单的代码。
-
你确定那些
Buttons 正好在fragment_blank中吗?他们必须在那个,特别是。如果是这样,您是否有多个版本的fragment_blank- 例如,针对不同的方向、不同的 Android 版本等 - 所有这些Buttons 可能不在每个版本中?