在考虑android活动的情况时,第一种工作方法是onCreate
方法吗?
假设我想将2个参数传递给android活动类说UserHome
。为此,我正在创建活动类UserHome
的构造函数并接受参数。
但是当我们调用一个活动时,我们没有初始化Activity类,我们只是创建了UserHome
类的意图。
那么我们如何在不使用intent.putExtra("keyName", "somevalue");
用法的情况下将params从另一个活动传递给该活动。
专家们请说明我们如何能够涵盖这样的情况。?
答案 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.捆绑收集
答案 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,但也保留了类的属性,因此可以有,构造函数,方法,成员