当前位置: 首页 > 面试题库 >

尝试查找ViewById时抛出NullpointerException

司空玮
2023-03-14
问题内容

我有以下活动:

public class MainActivity extends ActionBarActivity {

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

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

    Button login = (Button) findViewById(R.id.loginButton);

    login.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intent = new Intent(MainActivity.this,LoginActivity.class);
            startActivity(intent);
        }
    });

}

我得到一个NPE,当我尝试调用findViewByIDR.id.loginButton,我猜这是因为loginButton是一个独立的片段,我有作为之内:

public static class StartFragment extends Fragment {

    public StartFragment() {
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_main, container, false);

    }
}

但是,我不确定如何解决此问题,以便可以找到loginButton
ID。我以前没有使用过片段,所以我意识到我可能正在使用它们/错误地实现了它们。fragment_main包含在几个按钮LinearLayout,并activity_main没有什么,但一个FrameLayout


问题答案:

从片段编写代码以初始化按钮,因为您的按钮进入片段布局而不是活动布局。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_main, container,
            false);
    Button login = (Button) rootView.findViewById(R.id.loginButton);
    login.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intent = new Intent(MainActivity.this,
                    LoginActivity.class);
            startActivity(intent);
        }
    });

    return rootView;
}

而从删除登录按钮相关的代码onCreateActivity



 类似资料:
  • 问题内容: 这是我的第一个android程序,它是一个修改过的hello世界。我在MAC上的仿真器上运行它。我尝试与.NET Web服务进行通信,但在处给出了异常。我可以从模拟器访问该站点。任何帮助表示赞赏:) 问题答案: 尝试在您的AndroidManifest.xml中添加“互联网”权限:

  • 我对Android/Kotlin非常陌生。我已经创建了一些程序,正在取得良好的进展。但是从今天开始,我遇到了一个问题,即使在标准的“Hello World”程序中也无法运行“find viewbyid”(空活动)。 我只在XML中添加了android:id=“@+id/mytext”一行。

  • 在执行某个操作之前,我正在检查 null,但我遇到了一些问题。以下是代码: 我在点 c.size() != null 处得到一个“运算符 != 未定义参数类型int,null”。我知道 size 方法的返回类型是整数,这就是我收到此错误的原因吗?希望有人能提供建议。谢谢。

  • 我正在使用改造下载一些媒体文件,如视频,mp3,jpg,pdf。在我的应用程序中,当我想下载一个MP4格式的55MB的大文件时,Trere是一个问题。当我想下载这个文件时,我会遇到如下错误: 最后,这是我的createServiceFile方法: 如果你能帮助我,我真的很感激:)

  • 我试图将jBPM 5.4集成到现有的servlet中。 servlet在JBoss 7.1中运行良好,但在我添加一个与jBPM相关的API时,由于抛出异常而失败。(我使用了安装中的评估样本作为模板。)我向servlet的doPost()中添加了: 执行此语句后,将引发以下异常: 20:51:06394错误[org.apache.catalina.core.ContainerBase.[jboss.

  • 我有一个异步函数,我想同时测试成功和失败。函数成功时返回一个字符串,失败时抛出。我在测试失败上失败得很惨。下面是我的代码: 我通过注释失败的代码并在注释中添加结果来禁用 正如你所看到的,什么都不起作用。我相信我的测试几乎是第一个失败测试的Promises示例和最后一个失败测试的Async/Await示例的完全副本,但是没有一个可以工作。 我相信与Jest文档中的示例的不同之处在于,它们展示了如何测