Как отправить / обнаружить ссылку / пометить для определенного действия от другого - PullRequest
0 голосов
/ 20 июня 2019

Как я могу отправить или определить ссылку или флаг, если определенный Activity был запущен с другого Activity или нет? Мне действительно нужна форма, в которой я могу выполнить только определенный фрагмент кода, только если этот код был вызван определенным Activity, например:

Задание 1:

Intent intent = new Intent(this,ranking.class);
startActivity(intent);

деятельности2:

Intent intent = new Intent(this,ranking.class);
startActivity(intent);

Ranking.class (это псевдокод, поскольку я действительно не знаю, как / что делать) :

if(I was called by Activity  1) {
    //do something
} else {
     finish();
}

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Вы можете .putExtra отправить сообщение вашему Intent.

Активность 1

Intent intent = new Intent(this,ranking.class);
intent.putExtra("activity", 1);
startActivity(intent);

Активность 2

Intent intent = new Intent(this,ranking.class);
intent.putExtra("activity", 2);
startActivity(intent);

Рейтинг. Класс

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

if (activityNumber == 1) {
    //do something
} else{
    finish();
}

1 голос
/ 20 июня 2019

Ответ @ israel-dela-cruz правильный, вам нужно использовать extra для различения флагов.Здесь более компактная версия, чтобы избежать использования магического числа и магического ключа :

public class RankingActivity extends Activity {

  private static final ACTIVITY_OPTION_KEY = "activityOptionKey";
  private static final int FROM_ACTIVITY_ONE = 1;
  private static final int FROM_ACTIVITY_TWO = 2;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_rating);

     ...

     Bundle bundle = getIntent().getExtra();
     int option = bundle.getInt(ACTIVITY_OPTION_KEY);

     if(option == FROM_ACTIVITY_ONE) {
       // do something when called from activity one
     } else if(option == FROM_ACTIVITY_TWO) {
       // do something when called from activity two
     } else {
       // is there something else?
     }

     ...
  }

  // Use intent factory to remove dependency to magic number and magic key
  public static Intent createIntentFromActivityOne(Activity activity) {
    Intent intent = new Intent(activity, RatingActivity.class);
    intent.putExtra(ACTIVITY_OPTION_KEY, FROM_ACTIVITY_ONE);
    return intent;
  }

  public static Intent createIntentFromActivityTwo(Activity activity) {
    Intent intent = new Intent(activity, RatingActivity.class);
    intent.putExtra(ACTIVITY_OPTION_KEY, FROM_ACTIVITY_TWO);
    return intent;
  }
}

, тогда вы можете создать намерение, не зная магический ключ RatingActivity имагическое число:

// from activity one
Intent intent = RatingActivity.createIntentFromActivityOne(this);
startActivity(intent);

// from activity two
Intent intent = RatingActivity.createIntentFromActivityTwo(this);
startActivity(intent);
...