Java 包含的合并根元素内视图的findViewById

Java 包含的合并根元素内视图的findViewById,java,android,merge,include,findviewbyid,Java,Android,Merge,Include,Findviewbyid,我想在多个活动中使用视图。就我而言,这是一个浮动操作按钮。当我通过findViewById搜索视图时,程序抛出一个NullPointerException。如何访问FloatingAction按钮 由于按钮应该总是相同的,所以我创建了一个XML布局,只在mergeroot元素中包含FloatingActionButton,以减少使用include时的开销 浮动按钮.xml 到目前为止,这是可行的 为了在我的所有活动中具有相同的功能,我创建了一个BaseActivity,我的其他类从中继承,例如我

我想在多个活动中使用视图。就我而言,这是一个浮动操作按钮。当我通过findViewById搜索视图时,程序抛出一个NullPointerException。如何访问FloatingAction按钮

由于按钮应该总是相同的,所以我创建了一个XML布局,只在mergeroot元素中包含FloatingActionButton,以减少使用include时的开销

浮动按钮.xml

到目前为止,这是可行的

为了在我的所有活动中具有相同的功能,我创建了一个BaseActivity,我的其他类从中继承,例如我的MainActivity

基本活动

主要活动范例

启动应用程序时,我在BaseActivity中收到一个NullPointerException,用于在视图变量include_merge为null时尝试查找内部元素

正如我读到的,include标记和根元素应该具有相同的android:id。当使用merge作为根元素时,有什么区别吗?甚至可以将合并标记转换为视图

我是否需要在BaseActivity中使用setContentView,因为它的onCreate方法是在MainActivity方法之前调用的

编辑: 增加了setContentViewR.layout.activity_main;如注释中所述的BaseActivity,但仍然无法修复它。

您不必为or标记设置id。只需将其和findviewbydr.id.include\u merge一起删除即可。标记表示其所有视图都添加到标记的容器中。因此,没有设置了id的视图。但是你可以直接找到晶圆厂

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fab = include_merge.findViewById(R.id.addBloodDonation);
}

尚未调用setContentViewR.layout.activity_main。首先调用BaseActivity的onCreate。在调用super.onCreatesavedInstanceState后在BaseActivity中添加setContentViewR.layout.activity_main并不能解决此问题。我试过了,因为我以前已经假设过类似的事情。无论如何,我可以更新我的问题,使其包含此调用。在调用setContentViewCool之前,它仍在尝试查找视图!感谢您的帮助:
<include
    android:id="@+id/include_merge"
    layout="@layout/floating_button" />
public abstract class BaseActivity extends AppCompatActivity {
    public FloatingActionButton fab;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View include_merge = findViewById(R.id.include_merge);
        fab = include_merge.findViewById(R.id.addBloodDonation);
    }
}
public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fab = include_merge.findViewById(R.id.addBloodDonation);
}