java - 从其他类调用 MainActivity 的方法

标签 java android

我正在开发一个 Android 应用程序,因此,我有一个 MainActivity 类。在该 MainActivity 类中,我有一个方法,我们将其称为 doSomething():

public class MainActivity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void doSomething(){
        // bla bla bla
    }
}

我还有一个不同的类(具有不同的布局),称为OtherActivity。我想使用其中的 doSomething 方法:

public class OtherActivity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other_activity_layout);

        // Let's use doSomething()
    }
}

我尝试过这个:

public class OtherActivity extends AppCompatActivity {
    MainActivity main;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other_activity_layout);

        // Let's use doSomething()
        MainActivity main = new MainActivity();
        main.doSomething();
    }
}

但是它不起作用。我还尝试使 OtherActivity 扩展 MainActivity,执行以下操作:

public class OtherActivity extends MainActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other_activity_layout);

        // Let's use doSomething()
        super.doSomething();
    }
}

但它不允许我初始化布局...

我该怎么办?

提前致谢。

最佳答案

Activity Broadcast之间进行通信是最好的方式,对于同一个应用程序,我们可以使用LocalBroadcastManager来使用本地广播。

首先,我们应该在MainActivity中注册一个广播,

public class MainActivity1 extends AppCompatActivity {

    public static final String INTENT_FILTER = "do_some_action";
    public static final String INTENT_BUNDLE_VALUE = "value1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main1);

        LocalBroadcastManager.getInstance(this).registerReceiver(
                mChangeListener, new IntentFilter(INTENT_FILTER));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        LocalBroadcastManager.getInstance(this).unregisterReceiver(mChangeListener);
    }

    private BroadcastReceiver mChangeListener = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intentData) {
            // you can do anything here
            if (intentData != null && intentData.hasExtra(INTENT_BUNDLE_VALUE)) {
                String value = intentData.getStringExtra(INTENT_BUNDLE_VALUE);

                doSomeAction(value);
            }
        }
    };
    private void doSomeAction(String value) {

    }
}

然后,为了从OtherActivity在MainActivity中执行一些操作,我们可以从OtherActivity发送本地广播,它将到达我们在MainActivity中注册的接收者,

public class OtherActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);

        // You can call MainActivity to do some actions
        Intent intent = new Intent(MainActivity1.INTENT_FILTER);

        intent.putExtra(MainActivity1.INTENT_BUNDLE_VALUE, "Any string or any value");

        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
}

完成!!!.

关于java - 从其他类调用 MainActivity 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416984/

相关文章:

android - phonegap 地理位置总是在超时时失败

java - 尝试在空对象引用(服务)上调用虚拟方法

android - Phonegap 低性能问题

java - Google+ 按钮集成...NulPointerException

java - 使用ServerSockets和Sockets时,BufferedReader挂起,并且看来连接形式不正确

java - Android 加密不起作用(使用 AES/CBC/PKCS7Padding 的 PBKDF2WithHmacSHA256 加密)

android - Android 中的 WebView 不显示网页样式

java - 命名 2 个 Java 虚拟机线程

java - java.time.ZoneId 是否有原因不包括 ZoneIds 的枚举?

安卓键盘源