为什么“findViewById”在oncreate方法中为android返回null?

时间:2014-07-03 03:28:19

标签: android

我已经查看了stackoverflow上这个新手android问题的答案,但我无法理解最佳解决方案是什么。

我正在尝试创建一个包含几个文本字段和一个按钮的简单活动(带有一个片段)。按下按钮时,我希望按钮能够做某事!

所以我有我的mainActivity类及其代码片段。我正在尝试正确设置" onClickListener"到我的按钮对象。

当我在" onCreate"在活动本身的方法中,它会抛出一个nullpointerexception - 我猜测这是因为按钮本身尚未创建。但是,将此代码放在OnStart方法中会导致它被反复调用并且看起来不合适。

所以我把它移到了"占位符片段" - 它不再被报告为null,但我无法使用意图导航到另一个页面(因为其他页面不是静态的,我不能使用&#34来引用当前活动;这个")。

我很困惑,看起来很简单。

场景#1:尝试在OnCreate方法中启动它(:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_made_my_day);

////////////////////// PROBLEM IS HERE //////////////////////////////////
    Button butLogin = (Button) findViewById(R.id.but_login);
    butLogin.setOnClickListener(butLogin_OnClickListener);

///////////

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
}

版本2 - 片段代码,也不起作用:

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_made_my_day, container, false);

        Button butLogin = (Button) rootView.findViewById(R.id.but_login);
        butLogin.setOnClickListener(butLogin_OnClickListener);

        return rootView;
    }

1 个答案:

答案 0 :(得分:2)

首先,您可以通过调用getActivity()来引用片段中的活动(在附加之后)。这应该足以启动意图。例如:

Intent intent = new Intent(getActivity(), ActivityToCall.class);
getActivity().startActivity(intent);

其次,but_login按钮实际位于activity_made_my_day.xml还是fragment_made_my_day.xml?根据具体情况,您可以使用findViewById()(活动或片段)。