无法从片段按钮启动活动

时间:2016-04-06 16:43:59

标签: java android android-fragments

初学者在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,其中包含此片段,片段仅包含此按钮。

3 个答案:

答案 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);
            }
        });

    }