2012-05-15 1 views
1

(Я знаю, что группы активности и вкладки устарели. Я не могу переориентировать мое приложение в данный момент, поэтому, если это возможно, я хочу закончить его с помощью текущего дизайна.)Отмена дочерней активности в группе действий при изменении вкладок

У меня есть TabActivity с тремя вкладками, A, B и C. Вкладка C является ActivityGroup с двумя дочерними действиями C1 и C2. C2 всегда вызывается из C1 и отклоняется, устанавливая C1 View и перезапуская намерение C1. Все это прекрасно работает. Моя проблема заключается в том, что если пользователь выбирает вкладку A или B во время действия C2, я хочу, чтобы активность C2 была отменена. В следующий раз, когда выбрана вкладка C, должна отображаться активность C1. То же самое, если пользователь выходит из приложения и повторно вводит его.

Я реализовал OnTabChangeListener(), поэтому я знаю, когда выбрана новая вкладка, и я даже могу сказать, активна ли вкладка C2 (или была до изменения вкладки). Мой вопрос заключается в том, как отменить действие C2, чтобы при выборе вкладки C запускалась активность по умолчанию C1, вместо того, чтобы возвращаться на ранее активную вкладку C2.

ответ

0

Просто вы можете использовать свой onPause() в Tab C и переопределить его с помощью того же кода, что вы могли бы использовать для возврата с c2 на c1. Поскольку onPause() будет вызываться только тогда, когда вы выйдете из этой конкретной вкладки, ваша группа активности будет восстановлена ​​в фоновом режиме, и когда вы вернетесь к этой вкладке C, вы можете увидеть свой C1 в первую очередь.

+0

Я подумал об этом, но способ, которым я заканчиваю c2-c1, - это перезапустить намерение C1 и setContentView() с представлением c1. Это вызовет проблемы с переключением на новую активность Tab (A или B). – Digilee

+0

Попробуйте. Я не думаю, что это вызовет у вас какие-либо проблемы, если вы слишком сильно используете сеть в этой деятельности. –

+0

Я попробую это завтра, спасибо – Digilee

1

Я думаю, вы можете использовать широковещательный отправитель и приемник для этой цели. В onpause создайте широковещательный приемник. Я предлагаю это, потому что, если вы хотите закончить c2 из любого другого места, тогда вы можете сделать это легко, отправив трансляцию. Используйте этот код:

BroadcastReceiver broadcast_receiver = null; // DECLARE IT IN YOUR CLASS. 

// WRITE BELOW CODE IN onPause OF C2 ACTIVITY. 
broadcast_receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("finish_c2")) { 
      unregisterReceiver(broadcast_receiver); 
      finish(); 
     } 
    } 
}; 
    registerReceiver(broadcast_receiver, new IntentFilter("finish_c2")); 

Чтобы закончить вашу деятельность, просто отправьте трансляцию из любого места.

//WRITE THE BELOW CODE WHERE YOU WANT TO FINISH C2 ACTIVITY. 
Intent intent = new Intent("finish_c2"); 
sendBroadcast(intent); 

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

+0

Это может сработать, но это кажется странным способом. Как я могу назвать завершение дочерней активности из группы действий onPause()? – Digilee

+0

Вы не вызываете финиш в активности ребенка. Вы вызываете финиш в действии C2, который вы хотите завершить. Вы отправляете трансляцию только из дочерней активности. Не беспокойтесь об этом коде, который я тестировал несколько раз в своем модуле, и он работает нормально. Например, A-> B-> C, например A start B и B Start C, теперь вы хотите удалить B из C. Если вы можете закончить активность B, тогда A будет автоматически автоматически снижаться до C, потому что это Stack, и если ваш удалите B, затем C автоматически сдвиньтесь вниз. –

+0

Есть и другие способы сделать это. Один из них не завершает активность B. Установите флаг в своей активности C, а затем получите свой флаг в onActivityResult активности B, если флаг true, а затем завершите операцию B. Таким образом, активность B будет там, но финишная активность будет настолько быстрой что никто не может знать, была ли какая-либо деятельность B настоящей или нет ... поэтому разные способы выбрать подходящий .. –