【问题标题】:how to know the calling activity in android如何知道android中的调用活动
【发布时间】:2011-02-11 10:12:57
【问题描述】:

我有一个被其他几个活动调用的活动。例如:我有 Activity1、Activity2、Activity3。 Activity1 调用 Activity2 并传递参数。 Activity3也调用Activity2并传递参数。

现在基于调用活动,Activity2 执行一些任务。 但是我怎么知道哪个活动正在调用 Activity2? 谁能帮帮我??

【问题讨论】:

标签: android android-activity


【解决方案1】:

如果您以startActivityForResult(Intent, int) 开始活动,那么您可以通过getCallingActivity().getClassName() 获得调用活动。

【讨论】:

  • 那么如何实际获取活动调用者的实际实例?
  • @ralphgabb 只需删除 .getClassName() 部分
【解决方案2】:

A.如果可以使用 startActivityForResult

根据下面的Zain Ali's answer:如果您可以使用 startActivityForResult() 启动 Activity,那么您可以通过 this.getCallingActivity().getClassName(); 获取调用 Activity 类的名称;

B.如果不能使用 startActivityForResult

如果你不能使用 startActivityForResult(),那么你可以使用以下方法: 您可以在意图中传递其他参数,检查活动中的值并采取相应措施。

1) 定义一个接口或常量类来定义整数常量来表示调用活动

public interface ActivityConstants {
            public static final int ACTIVITY_1 = 1001;
            public static final int ACTIVITY_2 = 1002;
            public static final int ACTIVITY_3 = 1003;
}

2) 在调用 Activity2 时在 Intent 中添加额外的参数。

        Intent act2 = new Intent(context, Activity2.class);
                act2.putExtra("calling-activity", ActivityConstants.ACTIVITY_1);
    // or ActivityConstants.ACTIVITY_3 if called form Activity3
startActivity(act2);

3)检查Activity2中这个额外参数的值并采取相应的行动..

int callingActivity = getIntent().getIntExtra("calling-activity", 0);

        switch (callingActivity) {
        case ActivityConstants.ACTIVITY_1:
            // Activity2 is started from Activity1
            break;
        case ActivityConstants.ACTIVITY_3:
            // Activity2 is started from Activity3
            break;
        }

【讨论】:

    【解决方案3】:

    在您的调用活动(FirstActivity)中:

    Intent i = new Intent(FirstActivity.this, SecondActivity.class);
    i.putExtra("classFrom", FirstActivity.class.toString());
    startActivity(i);
    

    并在被调用活动(SecondActivity)的onCreate中添加如下代码:

    Bundle bundle = getIntent().getExtras();
    
    if (bundle.getString("classFrom").equals(FirstActivity.class.toString())) {
         //Do some task
    }
    

    请注意,您应该小心,因为执行“b.getString("classFrom")”时捆绑对象不能为空。

    【讨论】:

      【解决方案4】:

      您可以传递一个附加参数来指定调用Activity

      【讨论】:

        【解决方案5】:

        我成功使用:(Activity).getLocalClassName()

        【讨论】:

          【解决方案6】:

          将任何内容(字符串/ int 等)传递给 putExtra 并在此基础上完成您的工作

          Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
               intent.putExtra("PARENT_ACTIVITY_REF", "ParentActivityIsA");
               startActivity(intent);
          

          然后像孩子一样接收

          String parentActivityRef = intent.getStringExtra("PARENT_ACTIVITY_REF");
          

          然后

          if (parentActivityRef.equals("ParentActivityIsA"){
                        // do your work here
          }else if ...{
                       // ...
          }else{
               //...
          }
          

          【讨论】:

            【解决方案7】:

            另一种解决方案,使用伴生对象,如下例所示:

            class MainActivity: BaseActivity {
                ...
                LoginActivity.callerActivity = this
                it.context.startActivity(Intent(getActivity(), LoginActivity::class.java))
                ...
            }
            
            class LoginActivity : BaseActivity() {
                companion object {
                    var callerActivity: AppCompatActivity? = null
                }
            
                ...
            
                callerActivity?.let {
                    it.callSomething()
                }
            }
            

            【讨论】:

              【解决方案8】:

              我正在使用这条线

                  if (((((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0).baseActivity)).compareTo(new ComponentName(getPackageName()
                                  , AnyActivityWantToCheck.class.getName())) == 0){
              // do somthing .....
                  }
              

              希望对你有用

              【讨论】:

              • 注意:此方法仅用于调试和呈现任务管理用户界面。并且已被弃用。
              猜你喜欢
              • 1970-01-01
              • 2011-09-12
              • 2021-10-06
              • 1970-01-01
              • 2017-10-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多