活动A完成时,活动A中的方法正在活动B中调用

时间:2018-07-28 13:09:19

标签: java android

我知道这很奇怪,但是今天我遇到了这个问题。我开发了几个应用程序,但从未见过这样的事情。 让我解释更多;我有一堂课,是所有活动的父项。我将其命名为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类。对此是否有解决方案有问题吗?

谢谢。

1 个答案:

答案 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() {}
}