简体   繁体   English

是否有从其他活动 class 访问 MainActivity 的解决方案?

[英]Is there a solution that access MainActivity from other Activity class?

I want to call function below.我想在下面打电话给 function。

mobileView.loadUrl("javascript:setUserId () ");

And mobileView is in MainActivity.而mobileView在MainActivity中。

public class MainActivity extends AppCompatActivity {
    private WebView mobileView;
}

I want to call function above after SecondActivity is finished.我想在 SecondActivity 完成后调用上面的 function。

public class SecondActivity extends AppCompatActivity {
    ...
    private void getUserId () {
        ...
        finish();
    }
}

And SecondActivity starts from AReceiver.而 SecondActivity 从 AReceiver 开始。

public class AReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        ...
        Intent i = new Intent(context, SecondActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ...
        context.startActivity(i);
    }
}

And AReceiver is called by below code... AReceiver 由以下代码调用...

class MainActivity {
    ...
    private void userId () {
        ...
        intent = new Intent(MainActivity.this, AReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(
                MainActivity.this, 
                alarmID, 
                intent, 
                PendingIntent.FLAG_UPDATE_CURRENT
        );
        alarmManager.set(
                AlarmManager.RTC_WAKEUP, 
                mCalendar.getTimeInMillis(), 
                pendingIntent
        );
        ...
    }
    ...
}

But I don't know how to access mobileView from SecondActivity.但我不知道如何从 SecondActivity 访问 mobileView。 Is there any solution?有什么解决办法吗?


What I've tried...我试过的...

  1. change variable from改变变量从
private webView mobileView 

to

public webView mobileView

2. call from SecondActivity Using 2.从SecondActivity调用使用

MainActivity.mobileView

It doesn't work for me.它对我不起作用。

You can try This option你可以试试这个选项

Intent意图

.............. .....................

You opened the new activity from another activity with startActivityForResult .您使用startActivityForResult从另一个活动中打开了新活动。 In that case you can just call the f inishActivity() function from your code and it'll take you back to the previous activity.在这种情况下,您只需从您的代码中调用finishActivity() function,它就会带您回到上一个活动。

it work only if you start the second activity from main activity仅当您从主要活动开始第二个活动时,它才有效

I solved this problem using local broad cast manager: .D Thank you @Shripad Jadhav who help this answer.我使用本地广播经理解决了这个问题:.D 谢谢@Shripad Jadhav,他帮助了这个答案。

Below description is solution.下面的描述是解决方案。 Hope it helpes somebody: :D希望它可以帮助某人::D


MainActivity.java MainActivity.java

public class MainActivity extends AppCompatActivity {
    private WebView wv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        LocalBroadcastManager.getInstance(this)
            .registerReceiver(mBroadcastReceiver, new IntentFilter("webview-filter"));
        ...
    }
    ...
    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            mv.loadUrl("javascript: loadMainData ()");
        }
    };
    @Override
    protected void onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver);
        super.onDestroy();
    }
}

SecondActivity.java SecondActivity.java

public class SecondActivity extends AppCompatActivity {
    private void someFunction () {
        sendMessage ();
    }
    ...
    private void sendMessage() {
        Log.d("sender", "Broadcasting message");
        Intent intent = new Intent("webview-filter");

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM