从其他 class 创建对象
Creating Object from other class
我有一个设置屏幕,您可以在其中选择、添加和删除应用的配置。
添加配置时,我创建了一个新的 inputBox 实例 Class(扩展设置 activity class - 我在其中存储了标准 android文本输入框)查询新配置的名称。
在此输入框的 Onclick 中调用来自 superClass(设置-activity)的过程来创建新的配置对象。
此过程从 activity(例如,选定的微调器元素)查询一些内容,包括 seekBar 的进度。
这是我获得 NPE 的地方:
java.lang.NullPointerException: Attempt to invoke virtual method'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
在应用程序初始化时也会调用相同的对象创建过程,并且工作正常。
我从错误中了解到,问题是当从子 class 调用过程时,不再设置变量对屏幕相应元素的引用 - 因此无法查询。
所以问题:
当从另一个 class?
调用过程时,如何查询 activity 元素的值
我知道这个话题很广泛,但我现在想了几天都想不通
提前感谢您的帮助。
这是问题的方案:
public class Settings extends AppCompatActivity{
Context settingsContext = this;
private Spinner someSpinner;
//other elements
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
someSpinner = (Spinner) findViewById(R.id.someView);
//other elements
addNewConfig.setOnClickListener((v) --> {
inputBox inputBox = new inputBox("OK", "Cancel", settingsContext, "sourcePath",1,1);
newConfigName = inputBox.show();
});
public sSetting makeNewConfig(String name, String sourcePath, int dataFrom, int dataTo){
sSetting newConfig;
newConfig = new sSetting("NAME", someSpinner.getProgress()>0, ...);
return newConfig;
}
}
输入框:
public final class inputBox extends Settings {
//someVars
inputBox(String buttonOk, String buttonCancel, Context setContext, String sourcePath, int dataFrom, int dataTo){
//variable setters
}
private String show() {
//show msgbox
//onclick ok
super.makeNewConfig(....);
}
为了解决这个问题,我稍微调整了我的项目:
我删除了 inputBox-Part,经过一些研究认为它对于我所需要的来说是一个过于复杂的解决方案。
但是:我现在在我的设置视图中添加了一个 editText。
虽然我不得不为此更改我的设置视图,但它现在看起来更好,而且为用户编辑配置名称非常容易。
我认为在大多数情况下都可以解决问题。添加 Popup-Boxes 只是需要更多的错误处理并使设计更复杂
希望对您有所帮助 ;)
如果您需要它的代码,可在此处获得:
GitHub - AIM
我有一个设置屏幕,您可以在其中选择、添加和删除应用的配置。
添加配置时,我创建了一个新的 inputBox 实例 Class(扩展设置 activity class - 我在其中存储了标准 android文本输入框)查询新配置的名称。
在此输入框的 Onclick 中调用来自 superClass(设置-activity)的过程来创建新的配置对象。 此过程从 activity(例如,选定的微调器元素)查询一些内容,包括 seekBar 的进度。
这是我获得 NPE 的地方:
java.lang.NullPointerException: Attempt to invoke virtual method'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
在应用程序初始化时也会调用相同的对象创建过程,并且工作正常。
我从错误中了解到,问题是当从子 class 调用过程时,不再设置变量对屏幕相应元素的引用 - 因此无法查询。
所以问题:
当从另一个 class?
我知道这个话题很广泛,但我现在想了几天都想不通
提前感谢您的帮助。
这是问题的方案:
public class Settings extends AppCompatActivity{
Context settingsContext = this;
private Spinner someSpinner;
//other elements
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
someSpinner = (Spinner) findViewById(R.id.someView);
//other elements
addNewConfig.setOnClickListener((v) --> {
inputBox inputBox = new inputBox("OK", "Cancel", settingsContext, "sourcePath",1,1);
newConfigName = inputBox.show();
});
public sSetting makeNewConfig(String name, String sourcePath, int dataFrom, int dataTo){
sSetting newConfig;
newConfig = new sSetting("NAME", someSpinner.getProgress()>0, ...);
return newConfig;
}
}
输入框:
public final class inputBox extends Settings {
//someVars
inputBox(String buttonOk, String buttonCancel, Context setContext, String sourcePath, int dataFrom, int dataTo){
//variable setters
}
private String show() {
//show msgbox
//onclick ok
super.makeNewConfig(....);
}
为了解决这个问题,我稍微调整了我的项目:
我删除了 inputBox-Part,经过一些研究认为它对于我所需要的来说是一个过于复杂的解决方案。
但是:我现在在我的设置视图中添加了一个 editText。
虽然我不得不为此更改我的设置视图,但它现在看起来更好,而且为用户编辑配置名称非常容易。
我认为在大多数情况下都可以解决问题。添加 Popup-Boxes 只是需要更多的错误处理并使设计更复杂
希望对您有所帮助 ;) 如果您需要它的代码,可在此处获得: GitHub - AIM