初学者在android;代码看起来很好,但在测试时,我点击按钮,没有任何反应。我在活动中的onCreate方法中添加了一个log.i来启动(这里是Act2)并且它没有显示,所以我必须在某个地方犯了一个错误。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//startNFC Activity when button clicked
View view = inflater.inflate(R.layout.fragment_find_book, container, false);
Button button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), Act2.class);
startActivity(i);
}
});
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_find_book, container, false);
}
上面的代码有什么问题吗?清单也可以提供帮助。也许我错过了其他一些明显的覆盖方法?
我很乐意发布更多代码;请注意,应用程序现在基本上只包含MainActivity,其中包含此片段,片段仅包含此按钮。
答案 0 :(得分:3)
您需要从方法中返回view
。目前,您正在重新扩充布局,这将创建一个全新的视图层次结构,该层次结构具有一个没有设置点击侦听器的按钮。这就是为什么当您按下按钮时不会发生任何事情。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//...everything you currently have
return view;
}
答案 1 :(得分:2)
替换
return inflater.inflate(R.layout.fragment_find_book, container, false);
带
return view;
您正在给布局充气两次。您将ClickListener
分配给第一个,但使用第二个。
答案 2 :(得分:0)
像这样更改您的代码。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_find_book, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button button = (Button) getView().findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), Act2.class);
startActivity(i);
}
});
}