这是我的代码,我不知道为什么它没有监听按钮事件以下代码来自片段文件
// private Button button;
LayoutInflater lf;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
lf=inflater;
View view = inflater.inflate(R.layout.fragment_home,
container, false);
Button button = (Button) view.findViewById(R.id.home_button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent=new Intent(lf.getContext(),sunhan_activity.class);
startActivity(intent);
}
});
return inflater.inflate(R.layout.fragment_home, container, false);
}
看看你的代码,你就会知道为什么代码不起作用。事实上,你已经给布局充气2次了,所以最后一次会被执行,而你的第一次充气View view = inflater.inflate(R.layout.fragment_home,container, false);
不会被执行,因为你没有使用过它。
只需更改代码如下:
// private Button button;
LayoutInflater lf;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
lf=inflater;
View view = inflater.inflate(R.layout.fragment_home,
container, false);
Button button = (Button) view.findViewById(R.id.home_button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent=new Intent(lf.getContext(),sunhan_activity.class);
startActivity(intent);
}
});
return view;
}
-
您不必为
LayoutInflater
声明额外的变量,因为您的onCreateView()
已经有一个变量可供使用。 -
移除后不要再次调用充气器中的上下文,您的片段有自己的上下文。因此,在intent中用
getContext()
替换lf.getContext()
。由于您正在从片段调用活动,请使用getActivity()
而不是getContext()
。 -
最后不要再返回新的
inflater
,您之前已将一个分配给View
。因此,从视图中返回您已声明的变量。
替换此
return inflater.inflate(R.layout.fragment_home, container, false);
带有
return view;
最后,它应该是这样的:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
Button button = (Button) view.findViewById(R.id.home_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), sunhan_activity.class);
startActivity(intent);
}
});
return view;
}