Activity中调用findViewById获取CoordinatorLayout返回null求解决
我来帮你排查这个常见的问题,findViewById()返回null基本都是布局加载环节出了问题,咱们一步步梳理可能的原因和解决办法:
最可能的原因:忘记调用
setContentView()加载布局
在Activity的onCreate()方法中,必须先调用setContentView()把你的布局文件加载到Activity中,之后才能通过ID找到控件。你的代码里漏掉了这关键一步!修改后的代码应该是这样:private CoordinatorLayout coordinatorLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 替换成你的登录布局文件名,比如R.layout.activity_login setContentView(R.layout.your_login_layout); coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayoutLogin); }一定要确保
setContentView()在findViewById()之前执行,顺序不能搞反。检查布局文件是否正确引用
确认setContentView()里传入的布局ID就是你提供的那个包含coordinatorLayoutLogin的XML文件,别不小心引用了其他布局(比如主页面的布局)。验证CoordinatorLayout的类导入是否匹配
你XML里用的是android.support.design.widget.CoordinatorLayout,要保证Java文件里的导入语句也是对应的:import android.support.design.widget.CoordinatorLayout;如果你的项目已经迁移到AndroidX,那需要把XML和Java代码都换成AndroidX版本的CoordinatorLayout:
XML里改成:<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/coordinatorLayoutLogin" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/login_bg"> </androidx.coordinatorlayout.widget.CoordinatorLayout>Java里导入:
import androidx.coordinatorlayout.widget.CoordinatorLayout;排除Fragment嵌套的情况
如果这个布局是属于某个Fragment的,那不能在Activity的onCreate()里直接查找控件,得在Fragment的onViewCreated()方法中通过getView().findViewById()来获取。不过看你的描述是在Activity里,这条可以作为备选排查项。
先从第一条开始检查,绝大多数情况下都是因为没加setContentView()导致的问题~
内容的提问来源于stack exchange,提问作者Mohsin

