1

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

当我不尝试捕获空__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);
}
}
4

2 回答 2

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

以最适合您的设计/想法的为准。

于 2013-01-02T09:48:05.920 回答
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);
于 2013-01-02T09:52:03.383 回答