Java 无法从片段按钮启动触觉

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

android初学者;代码看起来很好,但在测试时,我单击按钮,什么也没发生。我在要启动的活动(这里是Act2)中的onCreate方法中添加了一个log.I,但它没有显示,所以我一定是在某个地方出错了

@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()
绝对不是获取片段布局中的引用和设置视图的传统位置。如果您本应将视图创建(…)
作为第二个选项使用,而不是活动创建(…)