我的 A 类在其构造函数中创建了 B 类的实例。B 类的构造函数创建了其内部类 C 的实例。C 类在其构造函数中需要 A 类的字段,这就是问题所在。C 类仅达到 A 的字段的默认值。
在启动 B 和 C 之前,我在 A 的构造函数中初始化了 A 的字段的值。我检查了该字段是否具有我需要的值。尽管如此,C 的构造函数中该字段的值始终是默认值。我不知道如何处理这个问题。有什么帮助吗?
谢谢!
谢谢大家的回答!我觉得虽然有必要提供更多信息。
这是我的 A 类的一部分:有问题的变量是 startX 和 startY。我通过setter方法直接在构造函数中定义它们。B 类是 DrawView。C类是DrawThread。我不知道如何将参数传递给 DrawView 的构造函数,否则我会的。帮助?另一种选择是使用 /*display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
在 DrawView 或 DrawThread 中设置我的 startX 和 startY,但它就是不想工作。现在,这确实将我的问题更多地转移到了android上,对于如何在DrawThread的构造函数中获取屏幕大小的任何建议,我将不胜感激,这是所有这些的最终目标:)?
公共类 ColorAnimation 扩展 Activity {
public static float startX;
public static float startY;
//other stuff here
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// turn off the window's title bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
// tell system to use the layout defined in our XML file
setContentView(R.layout.main);
/*display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
startX = display.getWidth();
startY = display.getHeight();*/
mDrawView = (DrawView) findViewById(R.id.pend);
mDrawThread = mDrawView.getThread();
// give the DrawView a handle to the TextView used for messages
mDrawView.setTextView((TextView) findViewById(R.id.text));
B类的构造函数:
//
公共DrawView(上下文上下文,AttributeSet attrs){超级(上下文,attrs);
// register our interest in hearing about changes to our surface
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new DrawThread(holder, context, new Handler() {
@Override
public void handleMessage(Message m) {
mStatusText.setVisibility(m.getData().getInt("viz"));
mStatusText.setText(m.getData().getString("text"));
}
});
setFocusable(true); // make sure we get key events
}
//C类DrawThread的一部分:
类 DrawView 扩展 SurfaceView 实现 SurfaceHolder.Callback {
class DrawThread extends Thread {//................
//..............
public DrawThread(SurfaceHolder surfaceHolder, Context context,
Handler handler) {
// get handles to some important objects
mSurfaceHolder = surfaceHolder;
mHandler = handler;
mContext = context;