我可以在 setcontentview 之前以编程方式创建 ImageView android
can i create ImageView programmatically before setcontentview android
我可以在 android 中的 setContentView(R.layout.activity_main);
之前以编程方式初始化 ImageView 或任何其他视图吗??
实际上我得到了一个自定义实例 class(不是 activity)
在全局 onCreate 方法之前
像这样
MyInAppPurchaseBilling myInAppPurchaseBilling = new MyInAppPurchaseBilling(MenuClass.this);
并且在 class 构造函数中我必须使用该上下文来初始化我的偏好 class
public MyInAppPurchaseBilling(Activity launcher) {
this.activity = launcher;
tinyDB= new TinyDB(launcher);
}
这是我面临的logcat错误
07-05 17:22:01.852 9660-9660/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.write.urdu.poetry.urdutexteditor, PID: 9660
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.write.urdu.poetry.urdutexteditor/com.write.urdu.poetry.urdutexteditor.MenuClass}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access0(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133)
at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:375)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:370)
at com.write.urdu.poetry.urdutexteditor.TinyDB.<init>(TinyDB.java:55)
at com.write.urdu.poetry.urdutexteditor.inapppurchase.MyInAppPurchaseBilling.<init>(MyInAppPurchaseBilling.java:48)
at com.write.urdu.poetry.urdutexteditor.MenuClass.<init>(MenuClass.java:38)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access0(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
你要做的是
View view = getLayoutInflater().inflate(R.layout.activity_main, null, false);
imageView = (ImageView) view.findViewById(R.id.image);
setContentView(view);
试试这个:
View view = View.inflate(this, R.layout.activity_main, null); // view Exists after this code
TextView t = (TextView) view.findViewById(R.id.text);
setContentView(view);
t.setText("something");
在这里您可以看到 findViewById()
在 setContentView()
之前被调用。然而,该视图存在,因为它是膨胀的,但它可能对您有所帮助。
MyInAppPurchaseBilling
对象是在执行MenuClass.this对象的构造函数的同时创建的吗?在这种情况下(也许直到 onCreate()
在 MenuClass.this 上被调用,但我不确定这一点)Activity 对象内的上下文(在这种情况下说 MenuClass.this ) 尚未设置。
这是我的 MenuClass Activity 代码,我在 setContentView() 之前在 MenuClass onCreate() 方法中初始化 TinyDB,并在从首选项 class
中获取保存的布尔值后完成我的工作
public class MenuClass extends Activity {
TinyDB tinyDB;
MyInAppPurchaseBilling myInAppPurchaseBilling = new MyInAppPurchaseBilling(MenuClass.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myInAppPurchaseBilling.onCreate();
tinyDB= new TinyDB(MenuClass.this);
if (!tinyDB.getBoolean(Constant.isAdsDisabled)) {
//do your work
}
setContentView(R.layout.activity_menu_class);
}
}
这是我的 MyInAppPurchaseBilling 的代码 class 我在它的构造函数中什么也没做但是创建了单独的 onCreate 方法就像 activity 的 onCreate 并在其中初始化 TinyDB 并调用了 onCreate 方法在 super.*** 行之后的 MenuClass onCreate 中的这个 class ......这样我在 MyInAppPurchaseBilling class 中成功初始化 TinyDB 以将布尔值放在应用程序的开始并在 Menuclass 之后进行进一步处理
public class MyInAppPurchaseBilling {
private TinyDB tinyDB;
Activity activity;
public MyInAppPurchaseBilling(Activity launcher) {
this.activity = launcher;
}
public void onCreate() {
tinyDB= new TinyDB(activity);
}
}
我可以在 android 中的 setContentView(R.layout.activity_main);
之前以编程方式初始化 ImageView 或任何其他视图吗??
实际上我得到了一个自定义实例 class(不是 activity) 在全局 onCreate 方法之前 像这样
MyInAppPurchaseBilling myInAppPurchaseBilling = new MyInAppPurchaseBilling(MenuClass.this);
并且在 class 构造函数中我必须使用该上下文来初始化我的偏好 class
public MyInAppPurchaseBilling(Activity launcher) {
this.activity = launcher;
tinyDB= new TinyDB(launcher);
}
这是我面临的logcat错误
07-05 17:22:01.852 9660-9660/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.write.urdu.poetry.urdutexteditor, PID: 9660
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.write.urdu.poetry.urdutexteditor/com.write.urdu.poetry.urdutexteditor.MenuClass}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access0(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133)
at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:375)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:370)
at com.write.urdu.poetry.urdutexteditor.TinyDB.<init>(TinyDB.java:55)
at com.write.urdu.poetry.urdutexteditor.inapppurchase.MyInAppPurchaseBilling.<init>(MyInAppPurchaseBilling.java:48)
at com.write.urdu.poetry.urdutexteditor.MenuClass.<init>(MenuClass.java:38)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access0(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
你要做的是
View view = getLayoutInflater().inflate(R.layout.activity_main, null, false);
imageView = (ImageView) view.findViewById(R.id.image);
setContentView(view);
试试这个:
View view = View.inflate(this, R.layout.activity_main, null); // view Exists after this code
TextView t = (TextView) view.findViewById(R.id.text);
setContentView(view);
t.setText("something");
在这里您可以看到 findViewById()
在 setContentView()
之前被调用。然而,该视图存在,因为它是膨胀的,但它可能对您有所帮助。
MyInAppPurchaseBilling
对象是在执行MenuClass.this对象的构造函数的同时创建的吗?在这种情况下(也许直到 onCreate()
在 MenuClass.this 上被调用,但我不确定这一点)Activity 对象内的上下文(在这种情况下说 MenuClass.this ) 尚未设置。
这是我的 MenuClass Activity 代码,我在 setContentView() 之前在 MenuClass onCreate() 方法中初始化 TinyDB,并在从首选项 class
中获取保存的布尔值后完成我的工作public class MenuClass extends Activity {
TinyDB tinyDB;
MyInAppPurchaseBilling myInAppPurchaseBilling = new MyInAppPurchaseBilling(MenuClass.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myInAppPurchaseBilling.onCreate();
tinyDB= new TinyDB(MenuClass.this);
if (!tinyDB.getBoolean(Constant.isAdsDisabled)) {
//do your work
}
setContentView(R.layout.activity_menu_class);
}
}
这是我的 MyInAppPurchaseBilling 的代码 class 我在它的构造函数中什么也没做但是创建了单独的 onCreate 方法就像 activity 的 onCreate 并在其中初始化 TinyDB 并调用了 onCreate 方法在 super.*** 行之后的 MenuClass onCreate 中的这个 class ......这样我在 MyInAppPurchaseBilling class 中成功初始化 TinyDB 以将布尔值放在应用程序的开始并在 Menuclass 之后进行进一步处理
public class MyInAppPurchaseBilling {
private TinyDB tinyDB;
Activity activity;
public MyInAppPurchaseBilling(Activity launcher) {
this.activity = launcher;
}
public void onCreate() {
tinyDB= new TinyDB(activity);
}
}