从其他类创建对象
Posted
技术标签:
【中文标题】从其他类创建对象【英文标题】:Creating Object from other class 【发布时间】:2017-04-22 13:24:03 【问题描述】:我有一个设置屏幕,您可以在其中选择、添加和删除应用的配置。
添加配置时,我创建一个 inputBox 类的新实例(扩展设置活动类 - 我存储标准 android 文本输入框的过程)以查询新配置的名称。
在此输入框的 Onclick 中,调用来自超类(设置活动)的过程以创建新的配置对象。 这个过程从活动中查询一些东西(例如选择的微调器元素),包括seekBar的进度。
这是我获得 NPE 的地方:
java.lang.NullPointerException: Attempt to invoke virtual method'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
在应用初始化时也会调用相同的对象创建过程,并且工作正常。
我从错误中了解到,问题是当从子类调用过程时,不再设置变量对屏幕相应元素的引用 - 因此无法查询。
所以问题: 当从另一个类调用过程时,如何查询活动元素的值?
我知道这个话题很广泛,但我现在几天都想不通 提前感谢您的帮助。
这是一个问题的方案:
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(....);
【问题讨论】:
一个配置元素只包含数据,但我必须从设置屏幕查询数据(例如关闭/打开音乐搜索栏:我在配置对象中保存true或false)跨度>Settings extends AppCompatActivity
, inputBox extends Settings
, new inputBox(...)
... 你不应该这样做 ...阅读一些官方指南,尝试了解如何使用 Activity和其他安卓组件...
允许的活动状态是什么?
我在自定义 appBars 的官方指南中发现 Settings extends AppCompatActivity。
错误的部分是new inputBox(...)
...extends
部分只说明了原因(因为您不应该在从 Activity 派生的类上调用 new 运算符)
【参考方案1】:
为了解决这个问题,我稍微重组了我的项目: 我删除了 inputBox-Part,经过一些研究,我认为它对于我需要的东西来说太复杂了。 但是:我现在在我的设置视图中添加了一个 editText。 尽管为此我不得不更改我的设置视图,但它现在看起来更好,并且为用户编辑配置名称非常容易。
我认为在大多数情况下都可以解决问题。添加 Popup-Boxes 只是需要更多的错误处理,并使设计更加复杂
我希望这会有所帮助;) 如果您需要它的代码,可以在此处获得: GitHub - AIM
【讨论】:
以上是关于从其他类创建对象的主要内容,如果未能解决你的问题,请参考以下文章