Java 无法从片段按钮启动触觉
android初学者;代码看起来很好,但在测试时,我单击按钮,什么也没发生。我在要启动的活动(这里是Act2)中的onCreate方法中添加了一个log.I,但它没有显示,所以我一定是在某个地方出错了Java 无法从片段按钮启动触觉,java,android,android-fragments,Java,Android,Android Fragments,android初学者;代码看起来很好,但在测试时,我单击按钮,什么也没发生。我在要启动的活动(这里是Act2)中的onCreate方法中添加了一个log.I,但它没有显示,所以我一定是在某个地方出错了 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //startNF
@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,该片段只包含此按钮。您需要从该方法返回
视图。当前,您正在重新膨胀布局,这将创建一个全新的视图层次结构,该层次结构具有一个按钮,而无需单击侦听器集。这就是为什么当你按下按钮时什么也不会发生
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//...everything you currently have
return view;
}
您需要从方法返回视图
。当前,您正在重新膨胀布局,这将创建一个全新的视图层次结构,该层次结构具有一个按钮,而无需单击侦听器集。这就是为什么当你按下按钮时什么也不会发生
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//...everything you currently have
return view;
}
替换
return inflater.inflate(R.layout.fragment_find_book, container, false);
与
您正在将布局膨胀两次。将ClickListener
分配给第一个,但使用第二个。替换
return inflater.inflate(R.layout.fragment_find_book, container, false);
与
您正在将布局膨胀两次。将ClickListener
分配给第一个,但使用第二个。这样更改代码
@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);
}
});
}
像这样更改代码
@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);
}
});
}
哇,我想我需要重做教程了。太明显了。谢谢哇,我想我需要重做教程了。太明显了。谢谢在onActivityCreated而不是onCreateView中设置按钮的优点/原理是什么?因为视图(按钮等)初始化在展开布局之前是不可能的,所以您必须在onActivityCreated方法中设置按钮。@BKS在onCreateView()中为OP分配view
时视图被正确初始化
方法onActivityCreated()
绝对不是获取片段布局中的引用和设置视图的传统位置。如果您本应将onViewCreated(…)
用作第二个选项,而不是onActivityCreated(…)
。在onActivityCreated而不是onCreateView中设置按钮的优点/原理是什么?作为视图(按钮等)在展开布局之前无法初始化,因此您必须在onActivityCreated方法中设置按钮。@BKS当在onCreateView()方法中为OP赋值view
时,视图已正确初始化onActivityCreated()
绝对不是获取片段布局中的引用和设置视图的传统位置。如果您本应将视图创建(…)
作为第二个选项使用,而不是活动创建(…)
。