Android:Button虽然已创建,但仍为null

时间:2013-01-02 09:45:08

标签: java android imagebutton

我尝试使用 initializeBtn()函数创建我的ImageButton,但是当我检查它运行该函数时, __ animateBtn 为null。有什么想法吗?

当我不尝试捕获空 __ animateBtn 时,LogCat会抛出空指针异常。

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

2 个答案:

答案 0 :(得分:0)

您无法通过提供变量作为方法的值来更新变量。 (Java不支持参数引用,就像C ++那样)。

相反,您可以使用类成员字段

public void initializeBtn (int resid, boolean visible) {

     __animateBtn = new ImageButton (getApplicationContext());
     __animateBtn.setBackgroundResource(resid);

    if (visible)
       __animateBtn.setVisibility(View.VISIBLE);
    else
       __animateBtn.setVisibility(View.INVISIBLE);
} 

返回新创建的按钮:

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

无论哪种方式最适合您的设计/创意。

答案 1 :(得分:0)

使用:

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