从其他类调用MainActivity方法

时间:2017-06-07 15:31:04

标签: 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();
    }
}

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

我该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:0)

在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);
    }
}

完成!!!

答案 1 :(得分:0)

这样的事情可以解决问题,我将制作一个静态导航器来处理你的导航逻辑。如果你反对静态方法,你也可以在Application对象上创建它们,以便更容易管理依赖项。为了简单起见,我只是将它设置为静态。

//Making this fully static for simplicity, this is fine for a small app
//you can make it a singleton on the application class for more flexibility
public class Navigator {
    //static member vars that determine navigation
    // pass in Context if needed for navigation purposes
    public static void doSomething(Context context){ 
        // bla bla bla
    }
}

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

    private void doSomething() {
        Navigator.doSomething(this);
    }
}

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

    private void doSomething() {
        Navigator.doSomething(this);
    }
}