[android]Java 类扩展 MainActivity findViewById 却回空吗?

标签: Java Android
发布时间: 2017/3/19 18:59:28
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

此类扩展我主 Activity

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;
}

做过一些挖掘,但可以找出为什么我变的"一个"就要返回 null。
我的 MainActivity 有一 ContentView 套。

这是的内容我 onCreate 在 MainActivity

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

    ImageView start = (ImageView) findViewById(R.id.start);
    sceneRoot = (ViewGroup) findViewById(R.id.scene_root);
    questionView = findViewById(R.id.questionView);
    startView = findViewById(R.id.startView);
    gameOverView = findViewById(R.id.gameOver);

    animSlide = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide);
    animSlide.setAnimationListener(this);
    animZoom = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.zoom_fade);
    animZoom.setAnimationListener(this);

    set.addTransition(new Fade())
       .addTransition(new Slide(Gravity.RIGHT));

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getQuestion();
            TransitionManager.beginDelayedTransition(sceneRoot, set);
            startView.setVisibility(View.GONE);
            questionView.setVisibility(View.VISIBLE);
        }
    });
}

public void getQuestion (){
    time = (TextView) findViewById(R.id.timeBar);
    time.startAnimation(animSlide);
}

我不叫 getNumbers() 直到开始已被单击后, animation 已经开始。

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);

编辑︰

如果任何人都不知道,搞工作通过扩展类作为 Fragment 而不是我的 MainActivity。然后我只是使用 fragment 在我 xml

解决方法 1:

因为你扩展 Activity 类并不意味着 setContentView 获取也称那类。它只会这样做如果正常启动和你叫 super.onCreate(bundle) 从您自己的实现的 onCreateNumbers

基本上,你应该永远不会 new 任何 Activity 。因此没有内容也没有生命周期, view ,所以 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; }
}

从 MainActivity您可以查找并添加你想要。

Number n = new Numbers();
n.addNumber((ImageView) findViewById(R.id.one));

然而,我不知道这是否是有用的真正...

也许 Fragment 有助于更好的目的,如果你想要"分"观你 Activity ,但是它很难告诉。

赞助商