我尝试使用 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);
}
}
答案 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);