我想做的事情非常简单。我创建了两个类A和B.我在A中创建了一个单击处理程序,它调用B中的一个函数,该函数又调用A中的函数。在A中的被调用函数中,我创建了一个按钮。当我尝试按下按钮时,我的程序被强制关闭。
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();
}
}
答案 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);
虽然我不确定这是不是你想要做的。如前所述,您应该避免循环依赖。