Android:在片段按钮

时间:2016-12-27 15:04:54

标签: android android-fragments android-activity android-event

我有很多NPE,并且想知道你是如何管理这个常见任务的。

  1. 我的片段中有一个按钮,这里是WelcomeFragment。

  2. 将单击该按钮,并在MainActivity类中处理该事件。

  3. 片段是NPE,视图也是......

  4. 以下是我的MainActivity的代码片段:

    @Override
    public void onClick(View v) { 
        switch (v.getId()) {
            case R.id.button1:
                ...
                WelcomeFragment welcomeFragment = (WelcomeFragment) getFragmentManager().findFragmentByTag(WelcomeFragment.WELCOME_FRAGMENT_TAG);
                if (welcomeFragment == null){
                    welcomeFragment = new WelcomeFragment();
                }
                View view = welcomeFragment.getView();
                if (view == null){
                    view = new View(this);
                }
                TextView text1 = (TextView) view.findViewById(R.id.welcomeFragmentHeader);
                text1.setText(newTextToShow + resStr);
                break;
    

    ...

1 个答案:

答案 0 :(得分:0)

我假设当没有WelcomeFragment实例时,第一次单击此按钮时,您的应用程序崩溃了NPE:

(WelcomeFragment) getFragmentManager().findFragmentByTag(WelcomeFragment.WELCOME_FRAGMENT_TAG);

返回null,因此您输入if语句并构造一个WelcomeFragment。

这不是制作片段的正确方法。它的内容不会以这种方式膨胀,因此它没有任何意见。因此,稍后对(TextView) view.findViewById(R.id.welcomeFragmentHeader);的调用也会返回null。因此,您在下一行的空对象上调用setText(),并获取NPE。

您需要正确地充气,将您的片段添加到here中的大纲中,或更改您的应用逻辑。