【问题标题】:How to pass a variable from a activity to another, which is not the immediate activity?如何将一个变量从一个活动传递给另一个,这不是直接的活动?
【发布时间】:2020-05-09 06:51:05
【问题描述】:

在 android 中,要将变量从活动 1 传递到活动 2,需要使用意图。但是如何将变量从活动 1 传递到活动 3。在我的项目中,我在登录活动中从用户那里获取了一个 id,这在其他活动中是需要的,但这不是它的直接活动。如何做到这一点?

【问题讨论】:

  • 从活动1到活动3你是怎么打开的?
  • 通过activity 2,但是从activity 1 到activity 2 再到activity 3 有点难,如何直接通过呢?

标签: android android-intent


【解决方案1】:

您可以使用 SharedPreference

在 Preference 中设置值:

SharedPreferences.Editor editor = getSharedPreferences("mypref", MODE_PRIVATE).edit();
 editor.putString("name", "john");
 editor.putInt("id", 12);
 editor.apply();

从偏好中检索数据:

SharedPreferences prefs = getSharedPreferences("mypref", MODE_PRIVATE); 
String name = prefs.getString("name", "");
int idName = prefs.getInt("id", 0); 

【讨论】:

    【解决方案2】:

    在您的 Helper 类中创建一个静态变量,

    public class Helper {
        public static int user_id;
    }
    

    在活动A中设置它的值:

        Helper.user_id = 309; // id you want to save. 
    

    然后在Activity B中访问它的值:

        if(Helper.user_id != 0){
             user_id = Helper.user_id;
        }
    

    【讨论】:

      【解决方案3】:

      您可以使用 eventBus 将 id 从一个活动传递到另一个活动

      Gradle

      implementation 'org.greenrobot:eventbus:3.2.0'
      
      

      Activity-1:需要传入id的地方

      EventBus.getDefault().post(new MessageEvent());
      

      Activity-3 : 你需要在哪里接收 id

      注册 eventBus

      @Override
       public void onStart() {
           super.onStart();
           EventBus.getDefault().register(this);
       }
      
       @Override
       public void onStop() {
           super.onStop();
           EventBus.getDefault().unregister(this);
       }
      

      准备订阅者

      订阅者实现将在发布事件时调用的事件处理方法(也称为“订阅者方法”)。这些是使用 @Subscribe 注释定义的。

      @Subscribe(threadMode = ThreadMode.MAIN)  
      public void onMessageEvent(MessageEvent event) {/* Do something */};
      

      【讨论】:

      • 谢谢你的解决方案,我会试试的
      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多