在Android中管理两项活动时遇到问题

时间:2011-09-25 15:31:46

标签: android android-activity

我想做的事情非常简单。我创建了两个类A和B.我在A中创建了一个单击处理程序,它调用B中的一个函数,该函数又调用A中的函数。在A中的被调用函数中,我创建了一个按钮。当我尝试按下按钮时,我的程序被强制关闭。

类Loggs

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class Loggs extends Activity {

    Model model;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void clickHandler(View v)
    {
        model = new Model();
        model.startGame();
        //click();
    }

    public void startGame()
    {
        Log.d("Log","Reached start game");
        click();
    }
    public void click()
    {
        Log.d("Log","Reached click");
        Button btn =(Button)findViewById(R.id.startButton);
        btn.setEnabled(false);
    }

}

班级模型

import android.app.Activity; import android.os.Bundle; import android.util.Log;


public class Model extends Activity{
    Loggs log;  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }   

    public void startGame() {
        log= new Loggs();       
        Log.d("Logg","Reached start game Model");       
        log.startGame();    
    }
}

3 个答案:

答案 0 :(得分:1)

是R.layout.main中的R.id.startButton?比..你不能用new,imo实例化一个活动,因为活动的默认构造函数是私有的(我认为)。看看意图

答案 1 :(得分:0)

查看代码。做“log = new Loggs();”不会在Loggs上调用“onCreate”方法。这意味着永远不会调用“setContentView”。

在Loggs#click方法中,通过“findViewById”获得的按钮将为null。因此,btn.setEnabled会导致NullPointerException导致程序崩溃。

WarrenFaith和blackbelt给出了很好的建议。阅读活动,时间,方式和原因。

答案 2 :(得分:0)

你在这里想做什么并不是很清楚?活动不以这种方式相互通信。如果您希望一个活动启动另一个活动,则需要使用Intents:

例如,如果您想要Loggs中的Model活动,您将发出以下命令:

Intent i = new Intent(this, Model.class);
this.startActivity(i);

虽然我不确定这是不是你想要做的。如前所述,您应该避免循环依赖。