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