Java类扩展了MainActivity,但findViewById返回空值?

Java类扩展了MainActivity,但findViewById返回空值?,java,android,findviewbyid,Java,Android,Findviewbyid,这门课扩展了我的主要活动 public class Numbers extends MainActivity{ public ArrayList<ImageView> getNumbers () { ArrayList<ImageView> numbers = new ArrayList<>(); ImageView one = (ImageView) findViewById(R.id.one); numbers.add(one)

这门课扩展了我的主要活动

public class Numbers extends MainActivity{

public ArrayList<ImageView> getNumbers () {
    ArrayList<ImageView> numbers = new ArrayList<>();

    ImageView one = (ImageView) findViewById(R.id.one);
    numbers.add(one);
    return numbers;
}
在单击开始并启动动画之前,我不会调用getNumbers

public void onAnimationStart(Animation animation){
    if(animation == animSlide) {
        final Questions questions = new Questions();

        Numbers n = new Numbers();

        for (int i = 0; i < n.getNumbers().size(); i++) {
            n.getNumbers().get(i).setVisibility(View.GONE);
            n.getNumbersTen().get(i).setVisibility(View.GONE);
        }
        n.getNumbers().get(0).setVisibility(View.VISIBLE);
编辑:


如果有人想知道的话,我是通过将类扩展为一个片段而不是MainActivity来实现的。然后我在xml中使用了片段。

因为扩展了活动类并不意味着该类也会调用setContentView。它只有在正确启动并且您从自己的onCreate inthenumbers实现调用super.onCreatebundle时才会这样做

基本上,你不应该有任何新的活动。它没有生命周期,因此没有内容视图,因此findViewById无法工作

Numbers n = new Numbers();
您无法扩展任何内容,并且在图像列表周围有一个仅数据类

public class Numbers {
    private List<ImageView> numbers = new ArrayList<ImageView>();
    public Numbers() {}
    public void addNumber(ImageView v) { numbers.add(v); }
    public List<ImageView> getNumbers() { return numbers; }
}
然而,我不知道这是否有用,真的


如果您想要活动的子视图,那么一个片段可能有更好的用途,但很难说

可以显示视图的名称和内容吗?显示活动和布局的代码…并检查是否在SetContentView之前调用getNumbers,可能是因为在创建MainActivitymy view内容时在内部初始化了getNumbers。它基本上是一个带有几个s的活动主视图,其中一个视图有很多s,id标签为一个或两个等。如果您仍然需要查看它,我可以发布它。因此,如果我使用片段进行扩展,我将如何设置内容视图?我不知道您的布局是如何关联的。我想说的是,你必须从一个类中调用findViewById,这个类实际包含你需要从中查找的布局。
public class Numbers {
    private List<ImageView> numbers = new ArrayList<ImageView>();
    public Numbers() {}
    public void addNumber(ImageView v) { numbers.add(v); }
    public List<ImageView> getNumbers() { return numbers; }
}
Number n = new Numbers();
n.addNumber((ImageView) findViewById(R.id.one));