Java 安卓:按钮创建后为空

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

我试图使用initializeBtn()函数创建ImageButton,但在运行函数时选中它时,\uu animateBtn为空。有什么想法吗

当我不尝试捕捉null\uuu animateBtn时,LogCat抛出null指针异常

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);