android活动类构造函数工作

时间:2012-01-04 10:45:45

标签: java android parameters constructor

在考虑android活动的情况时,第一种工作方法是onCreate方法吗?

假设我想将2个参数传递给android活动类说UserHome。为此,我正在创建活动类UserHome的构造函数并接受参数。

但是当我们调用一个活动时,我们没有初始化Activity类,我们只是创建了UserHome类的意图。

那么我们如何在不使用intent.putExtra("keyName", "somevalue");用法的情况下将params从另一个活动传递给该活动。

专家们请说明我们如何能够涵盖这样的情况。?

4 个答案:

答案 0 :(得分:8)

不确定为什么你不想使用意图参数。这就是他们的目的。如果需要从应用程序的不同位置传递相同的参数,可以考虑使用静态构造函数为您构建意图请求。

例如:

/**
 * Sample activity for passing parameters through a static constructor
 * @author Chase Colburn
 */
public class ParameterizedActivity extends Activity {

    private static final String INTENT_KEY_PARAM_A = "ParamA";

    private static final String INTENT_KEY_PARAM_B = "ParamB";

    /**
     * Static constructor for starting an activity with supplied parameters
     * @param context
     * @param paramA
     * @param paramB
     */
    public static void startActivity(Context context, String paramA, String paramB) {
        // Build extras with passed in parameters
        Bundle extras = new Bundle();
        extras.putString(INTENT_KEY_PARAM_A, paramA);
        extras.putString(INTENT_KEY_PARAM_B, paramB);

        // Create and start intent for this activity
        Intent intent = new Intent(context, ParameterizedActivity.class);
        intent.putExtras(extras);
        context.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Extract parameters
        Bundle extras = getIntent().getExtras();
        String paramA = extras.getString(INTENT_KEY_PARAM_A);
        String paramB = extras.getString(INTENT_KEY_PARAM_B);

        // Proceed as normal...
    }
}

然后,您可以致电:

启动您的活动

ParameterizedActivity.startActivity(this, "First Parameter", "Second Parameter");

答案 1 :(得分:3)

我可以看到一种情况,即您无法使用通过Intent传递参数的标准方法:当您创建将由其他应用启动的活动时(例如,编辑) Tasker插件的活动,因此无法控制将启动您的活动的Intent

可以创建一个在其构造函数中接受参数的Activity。但是,使用它的技巧不是直接使用它,而是使用带有默认构造函数的派生类,该构造函数使用适当的参数调用super(),如下所示:

class BaseActivity extends Activity
{
    public BaseActivity(String param1, int param2)
    {
        // Do something with param1 and param2.
    }
    // Many more lines of awesomeness.
}

class DerivedActivity extends BaseActivity
{
    public DerivedActivity()
    {
        super("param1", 42);
    }
}

当然,如果您需要生成要传递给BaseActivity()的参数,您只需用函数调用替换硬编码值即可。

答案 2 :(得分:0)

我们可以使用捆绑的集合和共享首选项将父活动的值传递给子活动。 的 1。共享偏好 2.捆绑收集

Passing data or parameter to another Activity Android

答案 3 :(得分:0)

但是你也可以很好地创建UserHome的构造函数。

public class MainActivity extends Activity {
UserHome userHome = new UserHome(param1,param2);

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

为什么你认为初始化一个构造函数是不可能的?MainActivity是一个类似于任何其他的类,只是扩展了Activity,但也保留了类的属性,因此可以有,构造函数,方法,成员