我有一个我实例化两次的对象,每个对象都需要影响另一个对象中的某些东西。是的,它很难看,但在Android中,我想在一个显示/标签中设置一个单选按钮,与另一个显示/标签中的状态相匹配。我想我可以在父级中有一个方法来更新单选按钮的两个实例,这可能是一种更好的方法。但我不明白为什么我在下面所做的事情不起作用,我想理解为什么即使我不使用它。
我将在本例中使用'someField'作为交叉访问字段。我将'this'传递给父对象的每个实例化对象,然后我应该能够通过我想到的父对象访问另一个'兄弟'对象中的字段,但它似乎不起作用。这是代码的简化版本(实际上这两个类当然是在两个文件中):
public class EtMain extends TabActivity {
public WxFields mDepWx;
public WxFields mArrWx;
public void onCreate(Bundle savedInstanceState) {
mDepWx = new WxFields(this);
mArrWx = new WxFields(this);
}
}
public class WxFields {
private Activity mParent; // Main Window object
public int someField;
public WxFields(Activity myParent) {
mParent = myParent;
}
public void someSetup() {
Button mButton = (Button) mParent.findViewById(R.id.someRes); //<---mParent works here
mParent.mArrWx.someField = 0; //<------------ mArrWx cannot be resolved
//I don't seem to be able to access a field in the parent object
//Yes, it's not symmetrical, but the code is just for illustration purposes
}
}
答案 0 :(得分:2)
实际上,如果您将mParent
声明为EtMain
而不是Activity
,那么它会起作用(虽然它会很难看......)
Activity
没有此类字段(mArrWx
)
public class EtMain extends TabActivity {
public WxFields mDepWx;
public WxFields mArrWx;
public void onCreate(Bundle savedInstanceState) {
mDepWx = new WxFields(this);
mArrWx = new WxFields(this);
}
}
public class WxFields {
private EtMain mParent; // Main Window object
public int someField;
public WxFields(EtMain myParent) {
mParent = myParent;
}
public void someSetup() {
Button mButton = (Button) mParent.findViewById(R.id.someRes); //<---mParent works here
mParent.mArrWx.someField = 0;
}
}
答案 1 :(得分:1)
看起来您必须将mParent
投射到EtMain
类型才能使该字段可见。
mArrWx
不是Activity
类型的成员。
答案 2 :(得分:1)
我猜想你会使用一个Listener实现来获取需要保持同步的对象的引用。动作方法将检查哪个更新并同步另一个。