1

initializeBtn()関数を使用してImageButtonを作成しようとしましたが、関数を実行していることを確認したところ、 __animateBtnはnullです。何かご意見は?

null __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);
}
}
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 に答える