繁体   English   中英

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

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

我想在下面打电话给 function。

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

而mobileView在MainActivity中。

public class MainActivity extends AppCompatActivity {
    private WebView mobileView;
}

我想在 SecondActivity 完成后调用上面的 function。

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

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

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

但我不知道如何从 SecondActivity 访问 mobileView。 有什么解决办法吗?


我试过的...

  1. 改变变量从
private webView mobileView 

public webView mobileView

2.从SecondActivity调用使用

MainActivity.mobileView

它对我不起作用。

你可以试试这个选项

意图

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

您使用startActivityForResult从另一个活动中打开了新活动。 在这种情况下,您只需从您的代码中调用finishActivity() function,它就会带您回到上一个活动。

仅当您从主要活动开始第二个活动时,它才有效

我使用本地广播经理解决了这个问题:.D 谢谢@Shripad Jadhav,他帮助了这个答案。

下面的描述是解决方案。 希望它可以帮助某人::D


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

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