我似乎无法解决这个令人困惑的问题,我有很多很多东西需要在课堂上添加,以帮助减少混乱.
由于多种方法使用这些复选框变量.
我想把所有东西放在开口支架下面的顶部.
这是有效的,但不是我想要的:
public class MyClass extends Activity implements VIEw.OnClickListener { //leaving out most code like onCreate. Just pretend it's there. public voID checkboth(VIEw vIEw) { CheckBox cb1 = (CheckBox) findVIEwByID(R.ID.cb1); CheckBox cb2 = (CheckBox) findVIEwByID(R.ID.cb2); cb1.setchecked(true); cb2.setchecked(true); } @OverrIDe public voID onClick(VIEw v) { }}
但是对于我的生活,我无法弄清楚为什么我不能这样做:
public class MyClass extends Activity implements VIEw.OnClickListener {CheckBox cb1 = (CheckBox) findVIEwByID(R.ID.cb1);CheckBox cb2 = (CheckBox) findVIEwByID(R.ID.cb2); //leaving out most code like onCreate. Just pretend it's there. public voID checkboth(VIEw vIEw) { cb1.setchecked(true); cb2.setchecked(true); } @OverrIDe public voID onClick(VIEw v) { }}
解决方法:
您无法在此类方法之外初始化视图
CheckBox cb1 = (CheckBox) findVIEwByID(R.ID.cb1);CheckBox cb2 = (CheckBox) findVIEwByID(R.ID.cb2);
因为这意味着这些行在onCreate()之前运行,导致这些变量为null,并在尝试调用这些变量上的方法时抛出NPE.这是因为你在onCreate()中调用了setContentVIEw(R.layout.your_layout),并且在那个布局中调用了你的VIEws“live”.这意味着在调用setContentVIEw()使布局膨胀之前,无法初始化它们.在尝试初始化视图之前,必须调用setContentVIEw().没有办法绕过那一部分.
有些人可能会有所帮助的是创建一个单独的函数,在调用setContentVIEw()之后初始化这些变量.像这样的东西
public class MyActivity // declare your VIEws so they are global to the class TextVIEw tv; // more vIEws @OverrIDe public voID onCreat(stuff) { // super call setContentVIEw(R.layout.my_layout); init();
然后在你的init()函数中初始化你声明的所有视图
private voID init(){ tv = (TextVIEw) findVIEwByID(R.ID.myTextVIEw); // more initializations}
但你可以在onCreate(),onResume()或者只要它在setContentVIEw()之后的任何地方初始化它们
以这种方式声明和初始化它们将确保它们对Activity的其他函数,监听器,内部类等都可用.如果你有很多观点,它可能会减少“混乱”.
以上是内存溢出为你收集整理的java – 我想将我的变量设置在我的类的顶部,而不是在方法中全部内容,希望文章能够帮你解决java – 我想将我的变量设置在我的类的顶部,而不是在方法中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)