onClickListener,用于片段中不起作用的按钮



这是我的代码,我不知道为什么它没有监听按钮事件以下代码来自片段文件

//  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;
}
  1. 您不必为LayoutInflater声明额外的变量,因为您的onCreateView()已经有一个变量可供使用。

  2. 移除后不要再次调用充气器中的上下文,您的片段有自己的上下文。因此,在intent中用getContext()替换lf.getContext()。由于您正在从片段调用活动,请使用getActivity()而不是getContext()

  3. 最后不要再返回新的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;
}

最新更新