【问题标题】:Execute code in activity only call comes from particular activity from a series of calling activities仅在活动中执行代码调用来自一系列调用活动中的特定活动
【发布时间】:2016-09-01 13:09:38
【问题描述】:

我的应用中有 3 个活动。

MainActivitySecondActivityThirdAtivityMainActivityThirdActivity 各有一个按钮,可将我引至 SecondActivity。我想在SecondActivity 启动时执行一些代码,仅当用户从MainActivity 移动到该活动时,而不是从ThirdAtivity 时。

怎么做?

【问题讨论】:

  • 在 onResume 方法上复制代码。
  • 在调用 SecondActivity 时从 MainActivity 传递一个标志。在 SecondActivity 的 onResume 中查找标志。如果存在,请执行其他任务。
  • @Himani,什么活动?
  • 第二活动
  • @Prera​​kSola,怎么做?我以前从未使用过标志。

标签: android button android-activity


【解决方案1】:

将此代码放入您的 FirstActivity.java

Intent intent = new Intent(getApplictionContect, SecondActivity.class);
                intent.putExtra("code", 1);
                startActivity(intent);

在您的 ThirdActvity.java 中

  Intent intent = new Intent(getApplictionContect, SecondActivity.class);
                intent.putExtra("code", 2);
                startActivity(intent);

在您的 SecondActivity.java 中

  Intent intent = getIntent();
    int code = intent.getIntExtra("code", 0);

 if(code == 1)
 { 
    // Your code
 }
 else
 {
 }

【讨论】:

    【解决方案2】:

    使用Intents。像这样。

    class Activity1
    Intent intent = new Intent(this, YourSecondActivity.class);
    intent.putExtra("who","Activity1");
    startActivity(intent);
    
    class Activity3
    Intent intent = new Intent(this, YourSecondActivity.class);
    intent.putExtra("who","Activity3");
    startActivity(intent);
    
    class Activity2
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Intent intent = getIntent();
            String whoCalledMe = intent.getStringExtra("who");
        }
    

    【讨论】:

      【解决方案3】:

      像这样从第一个活动启动 SecondActivity 时使用 Bundles 设置键值对

      Intent intent = new Intent(this, SecondActivity.class);
      intent.putExtra("passed_from", "one");
      startActivity(intent);
      

      SecondActivity

      Bundle b = new Bundle();
      b = getIntent().getExtras();
      String passed_from= b.getString("passed_from");
      

      如果passed_from 等于“一”,则运行代码

      【讨论】:

        【解决方案4】:

        将该代码写入onCreate() of SecondActivity.java

        编辑 我没有意识到您可以将 ThirdActivity 作为您的主要启动器活动。在这种情况下,只需按照其他人的建议传递一些标志。像这样

        MainActivity.java

        startActivity(new Intent(MainActivity.this, SecondActivity.class).putExtra("flag", 1));
        

        在 ThirdActivty.java 中

        startActivity(new Intent(ThirdActivity.this, SecondActivity.class).putExtra("flag", 3));
        

        在 SecondActivity.java 中 在 onCreate() 中:

        int flag = getIntent().getIntExtra("flag", -1);
        //if flag is 1 coming from MainActivity, if 3 coming from third activity
        

        【讨论】:

        • 您说要在从 MainActivity 到 SecondActivity 时执行一些代码。 SecondActivity 的 onCreate 只会在来自 MainActivity 而不是来自 ThirdActivity 时被调用
        • 好的。但是如果我从 ThirdActivity 来参加那个活动呢?
        • 为什么它在来自第三个活动时不会被执行?
        • 当你从 MainActivity 转到 SecondActivity 时,它的 onCreate 将被调用,从第二个到第三个,它的 onpause。但是从第三名回到第二名只会运行它的onresume。从文档中阅读有关活动生命周期的更多信息
        • 但是如果你有从 Third 到 Second 的代码,并且 ThirdActivity 是你的主要启动器活动,这将不起作用
        【解决方案5】:

        在第一个活动按钮中点击:

        Intent i=new Intent(First.this,Second.class);
        i.putExtra("from","first");
        startActivity(i);
        

        在第三个活动按钮中点击:

        Intent i=new Intent(Third.this,Second.class);
        i.putExtra("from","third");
        startActivity(i);
        

        在第二个活动中接收意图并检查它来自哪里(点击了哪个活动按钮),然后相应地编写您的代码:

        SecondActivity.java

          String from=getIntent().getExtras().getString("from");
            if(from.equals("first"))
            {
               //Button of first activity is clicked
              //Execute your code
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-03
          • 1970-01-01
          相关资源
          最近更新 更多