我在尝试在片段中实现按钮单击侦听器时遇到问题。如果只有一个按钮,我没有问题,但是片段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
?
答案 0 :(得分:0)
尝试:
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
}