我知道这很奇怪,但是今天我遇到了这个问题。我开发了几个应用程序,但从未见过这样的事情。 让我解释更多;我有一堂课,是所有活动的父项。我将其命名为ActivityEnhanced。
public class ActivityEnhanced extends AppCompatActivity implements INetConnection.Callback{
public static INetConnection mNetWork;
private static DataPacket dataPacket;
@Override
protected void onResume() {
super.onResume();
G.setCurrentActivity(this);
if(dataPacket == null){
dataPacket = new DataPacket();
}
if(mNetWork == null){
mNetWork = new INetConnection(this);
mNetWork.connectToNetwork();
}
}
.....
.
.
public void sectionRequestDone() {}
}
我有两个孩子活动A和B,我想在活动A中收到确认代码时登录活动B。这两个活动中有一种方法是通用的,因此我正在使用这种方法来触发孩子特定事件发生时的班级。 [sectionRequestDone()]
public class A extends ActivityEnhanced {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a);
....
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = username.getText().toString();
String pwd = password.getText().toString();
login(userInfo); // this method is in parent class
}
});
}
@Override
public void sectionRequestDone() {
goToActivity();
}
private void goToActivity(){
Intent intent = new Intent(this, B.class);
startActivity(intent);
this.finish();
}
}
B级;
public class B extends ActivityEnhanced {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clearSections();
sectionRequest();
}
});
fillAdapter();
}
@Override
public void sectionRequestDone() {
fillAdapter();
alphaAdapter.notifyDataSetChanged();
}
}
现在他的问题是,每当我单击B类中的btn方法时,A类中的sectionRequestDone()都在调用,但我希望它在B类中起作用。这很奇怪,因为我完成了A类。对此是否有解决方案有问题吗?
谢谢。
答案 0 :(得分:1)
首先,我要感谢所有帮助我的人。几个小时后,我找到了解决方案。
解决方案:
如果要使用活动作为父项,并且其中包含一些静态字段,则必须在每个活动中设置其侦听器,这意味着我必须在ActivityEnhanced类的onResume()方法中执行此操作。在之前的代码中,所有INetConnection侦听器都仅在A类中调用,而这些侦听器并未在B类中再次调用,因此,当sectionRequestDone()方法调用它时,它在A类而非B类中触发。
我从ActivityEnhanced中删除了(实现INetConnection.Callback),并更改了如下代码:
public class ActivityEnhanced extends AppCompatActivity{
public static INetConnection mNetWork;
private static DataPacket dataPacket;
@Override
protected void onResume() {
super.onResume();
G.setCurrentActivity(this);
if(dataPacket == null){
dataPacket = new DataPacket();
}
if(mNetWork == null){
mNetWork = new INetConnection(this);
mNetWork.connectToNetwork();
}else{
mNetWork.setOnCallbackListener(new INetConnection.Callback(){
@Override
public void onSocketNull() {}
@Override
public void onConnectionSuccessful() {}
@Override
public void onDataReceive(Byte[] data) {
.
.
.
sectionRequestDone();
}
);
}
}
.....
.
.
public void sectionRequestDone() {}
}