Java 安卓:按钮创建后为空
我试图使用initializeBtn()函数创建ImageButton,但在运行函数时选中它时,\uu animateBtn为空。有什么想法吗 当我不尝试捕捉null\uuu animateBtn时,LogCat抛出null指针异常Java 安卓:按钮创建后为空,java,android,imagebutton,Java,Android,Imagebutton,我试图使用initializeBtn()函数创建ImageButton,但在运行函数时选中它时,\uu animateBtn为空。有什么想法吗 当我不尝试捕捉null\uuu animateBtn时,LogCat抛出null指针异常 public class MainActivity extends Activity implements OnTouchListener { public static ImageButton __animateBtn; public static myLay
public class MainActivity extends Activity implements OnTouchListener {
public static ImageButton __animateBtn;
public static myLayout __myLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (__animateBtn == null) {
initializeBtn (__animateBtn, R.drawable.wrapped_leavemenu_0, false);
}
if(__myLayout == null) {
__myLayout = (myLayout) findViewById(R.id.relative_layout);
if (__animateBtn == null) {
Log.d("__animateBtn", "null");
finish();
}
if (__animateBtn2 == null) {
Log.d("__animateBtn2", "null");
finish();
}
else {
Log.d ("__myLayout.addView", "are" + __myLayout.getChildCount());
__myLayout.addView(__animateBtn, new AbsoluteLayout.LayoutParams(100,140,midX,midY-100));
__myLayout.addView(__animateBtn2, new AbsoluteLayout.LayoutParams(200,100,midX-100,midY));
}
}
public void initializeBtn (ImageButton btn, int resid, boolean visible) {
btn = new ImageButton (getApplicationContext());
btn.setBackgroundResource(resid);
if (visible) btn.setVisibility(View.VISIBLE);
else btn.setVisibility(View.INVISIBLE);
}
}
如果变量是方法的值,则无法更新该变量。(java不支持引用引用参数,例如C++做的)。< /P> 相反,您可以使用类成员字段: 或返回新创建的按钮:
public ImageButton initializeBtn (int resid, boolean visible) {
ImageButton btn = new ImageButton (getApplicationContext());
btn.setBackgroundResource(resid);
if (visible)
btn.setVisibility(View.VISIBLE);
else
btn.setVisibility(View.INVISIBLE);
return btn;
}
以最适合您的设计/想法的为准。使用:
public ImageButton initializeBtn (int resid, boolean visible) {
ImageButton btn = new ImageButton (this);// use this instead of getApplicationContext()
btn.setBackgroundResource(resid);
if (visible) btn.setVisibility(View.VISIBLE);
else btn.setVisibility(View.INVISIBLE);
return btn;
}
然后在onCreate()
方法中:
__animateBtn = initializeBtn(R.drawable.wrapped_leavemenu_0, false);
对它从不初始化。btn=新的。。。不影响_animateBtn,它会影响局部变量。在第二种方法中更改返回类型,它将给出错误,因为您尝试返回ImageButton,并且您的方法也返回void,谢谢您的提示响应。我更喜欢第二个,而且它更优雅。哈哈,我只是先用C++的经验把Java分解成java,然后我回忆起C++的工作原理。
__animateBtn = initializeBtn(R.drawable.wrapped_leavemenu_0, false);