我有一个设置屏幕,您可以在其中选择,添加和删除应用程序的配置。
添加配置时,我创建了一个inputBox类的新实例(扩展了设置活动类 - 我存储了标准android文本输入框的过程),以查询新配置的名称。
在此输入框的Onclick中,调用superClass(settings-activity)中的过程来创建新的配置对象。 此过程从活动中查询一些内容(例如,选定的微调框元素),包括seekBar的进度。
这是我获得NPE的地方:
java.lang.NullPointerException: Attempt to invoke virtual method'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
在初始化应用程序时也会调用相同的对象创建过程,并且工作正常。
我从错误中了解到,问题是当从子类调用过程时,不再设置变量对屏幕的corrseponding元素的引用 - 因此无法查询。
所以问题:
当从另一个类调用过程时,如何查询活动元素的值?
我知道这个话题相当广泛,但我现在几天都无法解决这个问题。 感谢您的帮助。
以下是问题的方案:
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;
}
}
和inputBox:
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(....);
}
答案 0 :(得分:0)
为解决这个问题,我稍微重组了一下我的项目:
我删除了inputBox-Part,经过一些研究考虑了我需要的太复杂的解决方案
但是:我现在在我的设置视图中添加了一个editText。
虽然我不得不为此更改我的设置视图,但它现在看起来更好,编辑用户的配置名称非常容易。
我认为在大多数情况下都能解决问题。添加Popup-Box只需要更多的错误处理并使设计更复杂
我希望这会有所帮助;) 如果您需要它的代码,可在此处获取: GitHub - AIM