Поведение onBackPressed() с ActivityGroups
Быстрый вопрос: у меня есть группа деятельности. В этой группе деятельности у меня есть деятельность. Если я нажму обратно во время этого действия. Метод действия onBackPressed называется - Не группы действий onBackPressed - Почему это так?
РЕДАКТИРОВАТЬ: получил мой ответ, но проблема остается. Ниже следует код и объяснение моей оригинальной проблемы:
Я использую ActivityGroups в TabHost и как таковой был "вынужден" переопределить onBackPressed. Я могу без проблем перемещаться по своему приложению, нажимая обратно на телефоне и нажимая вкладки на моем вкладке. Но я не могу взаимодействовать с интерфейсом после нажатия Назад. Как только я снова нажимаю одну из вкладок на вкладке, я могу взаимодействовать со всем как обычно. Почему это происходит? Нужно ли переопределить onResume?
Соответствующий код
Настройки ActivityGroup:
public class SettingsActivityGroup extends ActivityGroup
{
// Keep this in a static variable to make it accessible for all the nested activities, lets them manipulate the view
public static SettingsActivityGroup group;
// Need to keep track of the history if you want the back-button to work properly, don't use this if your activities requires a lot of memory.
private ArrayList<View> history;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Allocate history
this.history = new ArrayList<View>();
// Set group
group = this;
// Start root (first) activity
Intent myIntent = new Intent(this, SettingsActivity.class); // Change to the first activity of your ActivityGroup
myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ReplaceView("SettingsActivity", myIntent);
}
/*
* Replace the activity with a new activity and add previous one to history
*/
public void ReplaceView(String pId, Intent pIntent)
{
Window window = getLocalActivityManager().startActivity(pId, pIntent);
View view = (window != null) ? window.getDecorView() : null;
// Add the old activity to the history
history.add(view);
// Set content view to new activity
setContentView(view);
}
/*
* Go back from previous activity or close application if there is no previous activity
*/
public void back()
{
if(history.size() > 1)
{
// Remove previous activity from history
history.remove(history.size()-1);
// Go to activity
View view = history.get(history.size() - 1);
Activity activity = (Activity) view.getContext();
// "Hack" used to determine when going back from a previous activity
// This is not necessary, if you don't need to redraw an activity when going back
activity.onWindowFocusChanged(true);
// Set content view to new activity
setContentView(view);
}
else
{
// Close the application
finish();
}
}
/*
* Overwrite the back button
*/
@Override
public void onBackPressed()
{
// Go one back, if the history is not empty
// If history is empty, close the application
SettingsActivityGroup.group.back();
return;
}
}
Произвольный дочерний элемент SettingsActivityGroup(CallForwardActivity)
public class CallForwardActivity extends ListActivity
{
....
@Override
public void onBackPressed()
{
// Go one back, if the history is not empty
// If history is empty, close the application
SettingsActivityGroup.group.back();
return;
}
}
1 ответ
Потому что я считаю, что вызов onBackPressed() для выбранной в данный момент активности - желаемое поведение.
Стоит также отметить, что ActivityGroup устарела, но я предполагаю, что вы программируете для <3.0 и не хотите работать с библиотеками поддержки.
Относительно вашего отредактированного вопроса. Другой вопрос на этом сайте приводит эту статью в качестве хорошего примера ActivityGroup, и я согласен http://ericharlow.blogspot.com/2010/09/experience-multiple-android-activities.html Этот пример просто вызывает Finish() для текущего действия, когда нажата кнопка "Назад", и позволяет операционной системе перезапустить предыдущее действие, которое проще, чем то, что вы делаете, и, будем надеяться, сработает! Вы также можете просто вызвать getParent() в своих дочерних действиях, чтобы избежать использования этой статической ссылки (мне кажется, что так читать проще для меня!).