Man*_*naq 13 android constructor android-activity
我知道我无法将参数传递给android中的Activity构造函数,但我想了解原因.
我试图做的是:
CalorieSelectorActivity csa = new CalorieSelectorActivity(userName);
Intent i = new Intent(thisContext, csa.getClass());
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
我已经将类定义如下:
public class CalorieSelectorActivity extends Activity {
public CalorieSelectorActivity(String name) {
super();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calorieselector);
}
}
Run Code Online (Sandbox Code Playgroud)
当我从构造函数中删除参数时,它完美地工作.我最后使用intent.putExtra做了它,但很想知道为什么不能通过将参数传递给构造函数来完成它?
LogCat:
02-04 06:46:52.257: W/dalvikvm(800): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
02-04 06:46:52.277: E/AndroidRuntime(800): FATAL EXCEPTION: main
02-04 06:46:52.277: E/AndroidRuntime(800): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.manarbushnaq.calorietracker/com.manarbushnaq.calorietracker.CalorieSelectorActivity}: java.lang.InstantiationException: com.manarbushnaq.calorietracker.CalorieSelectorActivity
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.os.Looper.loop(Looper.java:123)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-04 06:46:52.277: E/AndroidRuntime(800): at java.lang.reflect.Method.invokeNative(Native Method)
02-04 06:46:52.277: E/AndroidRuntime(800): at java.lang.reflect.Method.invoke(Method.java:521)
02-04 06:46:52.277: E/AndroidRuntime(800): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-04 06:46:52.277: E/AndroidRuntime(800): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-04 06:46:52.277: E/AndroidRuntime(800): at dalvik.system.NativeStart.main(Native Method)
02-04 06:46:52.277: E/AndroidRuntime(800): Caused by: java.lang.InstantiationException: com.manarbushnaq.calorietracker.CalorieSelectorActivity
02-04 06:46:52.277: E/AndroidRuntime(800): at java.lang.Class.newInstanceImpl(Native Method)
02-04 06:46:52.277: E/AndroidRuntime(800): at java.lang.Class.newInstance(Class.java:1429)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
02-04 06:46:52.277: E/AndroidRuntime(800): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
02-04 06:46:52.277: E/AndroidRuntime(800): ... 11 more
Run Code Online (Sandbox Code Playgroud)
Sam*_*eer 23
请参阅您的代码:
CalorieSelectorActivity csa = new CalorieSelectorActivity(userName);
Intent i = new Intent(thisContext, csa.getClass());
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
即使您创建了一个活动对象,您在Intent对象中"传递"的内容activity object也不仅仅是class of your activity.在startActivity()Android框架中将尝试实例化您的活动对象.并且它在执行此操作时调用默认构造函数(不带参数).当您的类没有没有参数的构造函数时,它会失败.
当然,您已经找到了正确的解决方案,将参数作为Intent对象的一部分传递.
我很惊讶没有人回答实际提出的问题!所以要回答这个问题Why I cannot pass parameters to Android Activity Constructor:因为 Android 调用了 Activity 的构造函数,而 Android 调用的唯一构造函数是默认构造函数,您当然可以覆盖它,但是“是否添加它并不重要,并且没有上下文它可以以有用的方式使用。 ”。
因此,您无法将参数传递给默认构造函数,因此您无法使用它来为您工作。
| 归档时间: |
|
| 查看次数: |
17288 次 |
| 最近记录: |