Подтвердить что ты не робот

Доступ к экземпляру родительской активности?

Предположим, что у меня есть класс first.java(класс активности), и я запускаю другое действие в этом классе (second.java - класс активности). Как я могу получить доступ к экземпляру first.java из second.java? Может ли кто-нибудь дать мне хорошее объяснение по этому поводу. Пример будет замечательным...

4b9b3361

Ответ 1

Если вам требуется второе действие, чтобы вернуть некоторые данные в свою первую активность, я рекомендую вам использовать startActivityForResult(), чтобы начать второе действие. Затем в onResult() в вашем первом действии вы можете выполнить необходимую работу.

В First.java, где вы запускаете Second.java:

Intent intent = new Intent(this, Second.class);
int requestCode = 1; // Or some number you choose
startActivityForResult(intent, requestCode);

Метод результата:

protected void onActivityResult (int requestCode, int resultCode, Intent data) {
  // Collect data from the intent and use it
  String value = data.getString("someValue");
}

В Second.java:

Intent intent = new Intent();
intent.putExtra("someValue", "data");
setResult(RESULT_OK, intent);
finish();

Если вы не хотите дожидаться завершения второго действия, прежде чем выполнять какую-либо работу в первом мероприятии, вместо этого вы можете отправить широковещательную передачу, на которую реагирует первая активность.

EDIT:

Если вам нужен доступ к некоторым значениям в вашем первом действии без статической ссылки на него, вы можете рассмотреть возможность включения своих действий в ActivityGroup.

Итак, ActivityGroup запускает первую активность. И затем первая активность использует ActivityGroup для запуска второго действия. Затем у вас будет доступ к Первому активу через вызов getParent() во втором действии.

class MyActivityGroup extends ActivityGroup {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    startChildActivity("first", new Intent(this, First.class));
  }
  public void startChildActivity(Intent intent) {
    Window window = getLocalActivityManager().startActivity(id, intent);
      if (window != null) {
        setContentView(window.getDecorView());
    }
  }
}

В First.class:

Intent = new Intent(this, Second.class);
((MyActivityGroup) getParent()).startChildActivity("second", intent);

В Second.class:

Activity first = (First) getParent();

Ответ 2

Вы можете просто вызвать getParent() из дочернего действия.

Я не знаю, почему другие ответы настолько сложны.

Ответ 3

Только это должно работать

class first
{
    public static first instance;
    oncreate()
    {
        instance = this;
    }
}

first.instance - это обязательная вещь, доступная из второго класса

Ответ 4

Невозможно создать действие напрямую.   В первом действии принимайте переменную статической активности, подобную этой,

public static Activity activity;

В onCreate сделайте это.

activity = this;

Затем во втором действии сделайте это,

Activity activity = (your activity name).activity;

Edit: Для передачи данных из одной активности в другую деятельность это не так. Выше ответ заключался в том, чтобы получить экземпляр активности из другой активности, которая изначально была задана.

Для передачи данных из одной активности в другую деятельность обычно используется пакет. Но если данные не являются примитивными типами данных, то используйте класс объектов, который должен реализовывать пакетный или сериализуемый интерфейс. Затем через расслоение можно только рассчитать список объектов, которые мы можем передать.

Ответ 5

попробуйте это, если эта работа 4 u.........
что-то вроде этого.....

class first
{
public static first instance;
oncreate()
{
instance=this;
}

public static getInstance()
{
return instance;
}

}

теперь из вызова второго класса first.getInstance();

вы также можете напрямую использовать экземпляр в статическом виде, как этот first.instance.......
Спасибо...