android活动类构造函数工作

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

假设我想将2个参数传递给android活动类,比如UserHome 。 为此我创建了活动类UserHome的构造UserHome并接受了params。

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

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

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

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

例如:

 /** * 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");

我可以看到一种情况,你无法使用通过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()的参数,则可以简单地用函数调用替换硬编码值。

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

将数据或参数传递给另一个Activity Android

但是你也可以很好地创建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,但也保留了类的属性,因此可以有,构造函数,方法,成员。