Java onCreate与initWithParameter c++;

Java onCreate与initWithParameter c++;,java,android,initialization,oncreate,Java,Android,Initialization,Oncreate,可能太简单了,但我找不到正确的方法 在C++中,我可以用参数:xxx < /c>来编写代码>实例化一个类,然后在init中设置一些init时间值为.t/p>的实例变量。 在Java中,我不知道怎么做。目前我做了以下工作: public class SpecialScreen extends BASEScreen{ private static final int ACTIVITY_1 = 1; @Override public void onCreate(Bundle savedInstanc

可能太简单了,但我找不到正确的方法

<>在C++中,我可以用参数:xxx < /c>来编写代码>实例化一个类,然后在init中设置一些init时间值为.t/p>的实例变量。 在Java中,我不知道怎么做。目前我做了以下工作:

public class SpecialScreen extends BASEScreen{
private static final int ACTIVITY_1 = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); //create the instance
    defineScreenType (ACTIVITY_1); //second call to set the instance variable
    presentOnScreen();
}
在BASEScreen中时:

public class BASEScreen extends Activity {
private Integer activityCode; // which activity should I do?

@Override
public void onCreate(Bundle savedInstanceState) {  // the creation
    super.onCreate(savedInstanceState);
}

// the setting of the instance variable
public void defineScreenType(int screenID) {
    activityCode = screenID;

}
    @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    Intent i;
    switch (item.getItemId()) {
    case OTHER_PAGE_ID:
        // 
        if (activityCode == ACTIVITY_1) {
            i = new Intent(this, SpecialScreen2.class);
            i.putExtra("Task", ACTIVITY_2);
            startActivityForResult(i, ACTIVITY_2);
            finish();

        } else {
            i = new Intent(this, SpecialScreen1.class);
            i.putExtra("Task", ACTIVITY_1);
            startActivityForResult(i, ACTIVITY_1);
            finish();
        }

        return true;
这不是最好的办法。如何做得更好

谢谢

添加以显示在BASEScreen中调用SpecialScreen:

public class BASEScreen extends Activity {
private Integer activityCode; // which activity should I do?

@Override
public void onCreate(Bundle savedInstanceState) {  // the creation
    super.onCreate(savedInstanceState);
}

// the setting of the instance variable
public void defineScreenType(int screenID) {
    activityCode = screenID;

}
    @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    Intent i;
    switch (item.getItemId()) {
    case OTHER_PAGE_ID:
        // 
        if (activityCode == ACTIVITY_1) {
            i = new Intent(this, SpecialScreen2.class);
            i.putExtra("Task", ACTIVITY_2);
            startActivityForResult(i, ACTIVITY_2);
            finish();

        } else {
            i = new Intent(this, SpecialScreen1.class);
            i.putExtra("Task", ACTIVITY_1);
            startActivityForResult(i, ACTIVITY_1);
            finish();
        }

        return true;
ps我知道再也不需要额外的钱了。这是我在两个特殊屏幕子类之前一直使用的方法,并且总是用这个参数调用BaseCurr.T/P>< P>正确,没有像C++那样的“默认”语法。您必须在构造函数中执行此操作。请注意,您不需要使用setter方法,您可以将
activityCode
设置为受保护而非私有,只需执行以下操作:

activityCode = ACTIVITY_1;
另一个选项是使用构建器模式来构建对象,使用构建器中的一组默认值,在请求构建对象时(需要时)覆盖这些默认值

编辑以下评论:

我为一些混淆道歉,因为我称它为“构造函数”,而它不是

如果在
BASEScreen
中,将访问权限从
private
更改为
protected

public class BASEScreen extends Activity {
    protected Integer activityCode;
然后,您可以在
SpecialScreen
子类中访问它:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activityCode = 1; // Or ACTIVITY_1 if you'd like
    presentOnScreen();
}

正确,没有C++中的“默认”语法。您必须在构造函数中执行此操作。请注意,您不需要使用setter方法,您可以将

activityCode
设置为受保护而非私有,只需执行以下操作:

activityCode = ACTIVITY_1;
另一个选项是使用构建器模式来构建对象,使用构建器中的一组默认值,在请求构建对象时(需要时)覆盖这些默认值

编辑以下评论:

我为一些混淆道歉,因为我称它为“构造函数”,而它不是

如果在
BASEScreen
中,将访问权限从
private
更改为
protected

public class BASEScreen extends Activity {
    protected Integer activityCode;
然后,您可以在
SpecialScreen
子类中访问它:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activityCode = 1; // Or ACTIVITY_1 if you'd like
    presentOnScreen();
}

如果我正确理解你的问题。Java中的任何类都可以有一个或多个构造函数。每个参数都可以没有参数,也可以有一组您传入的参数(尽管它们都必须具有唯一的集合/顺序,以便编译器可以告诉您要使用哪个参数)

当您执行新操作时,将调用每个,例如:

BASEScreen豪猪=新的特殊屏幕();//没有参数构造函数


基本屏幕豪猪=新的特殊屏幕(5);//获取参数的构造函数。

如果我正确理解了您的问题。Java中的任何类都可以有一个或多个构造函数。每个参数都可以没有参数,也可以有一组您传入的参数(尽管它们都必须具有唯一的集合/顺序,以便编译器可以告诉您要使用哪个参数)

当您执行新操作时,将调用每个,例如:

BASEScreen豪猪=新的特殊屏幕();//没有参数构造函数


基本屏幕豪猪=新的特殊屏幕(5);//接受参数的构造函数。

重新标记为android问题,因为它看起来是这样的。@user387184:您想做什么?类似于“用户按下按钮1,开始活动1”、“用户按下按钮2,开始活动2”的内容?根据用户的选择或其他条件启动不同的活动?重新标记为android问题,因为这似乎就是问题所在。@user387184:你想做什么?类似于“用户按下按钮1,开始活动1”、“用户按下按钮2,开始活动2”的内容?根据用户选择或其他条件启动不同的活动?对不起,我真的不明白。为创建的对象设置的activityCode变量在哪里?创建的对象需要知道它实际上是什么类型的屏幕-我在这里缺少什么?对不起,我真的不明白。为创建的对象设置的activityCode变量在哪里?创建的对象需要知道它实际上是什么类型的屏幕-我在这里遗漏了什么?对不起,在这里我也不确定是否完全理解。在哪里设置activityCode?我必须在基本屏幕内完成,对吗?所以我应该像约翰·芒施在上面写的那样通过考试?请解释一下。。。谢谢老师,请看我上面的编辑。我没有对您的示例代码给予足够的关注,因为您没有直接调用构造函数。很抱歉,在这里我也不能完全理解。在哪里设置activityCode?我必须在基本屏幕内完成,对吗?所以我应该像约翰·芒施在上面写的那样通过考试?请解释一下。。。谢谢老师,请看我上面的编辑。我没有充分注意您的示例代码,因为您没有直接调用构造函数。