Android Back Button работает в некоторых действиях и не работает в других
Я надеюсь, что кто-то может помочь с моей проблемой. Кнопка возврата Android работает в одних действиях и не работает в других. У My MainActivity есть и другие целевые действия, в зависимости от выбранных параметров. Поскольку мое приложение управляет картой, когда я щелкаю по информационному окну маркера, оно переходит к детализации по желанию, а когда я нажимаю кнопку возврата Android, оно возвращается к основной активности в обычном режиме (не путать с кнопка home в панели действий, которую я не хочу реализовывать).
Но когда я нажимаю на "Контакт" или "Условия и положения", и я намерен запускать действия "Контакт / Условия" так же, как и с infowindows, он открывает действие, как обычно, но кнопка "Назад" не Похоже, что он снова открывает контакт / условия и не возвращается к основному виду деятельности. Я искал много постов и добавляю свои наблюдения:
- Я не вызываю метод finish() для своей функции MainActivity, поэтому я специально не работаю со стеком активности.
- Я попробовал putExtra("finishActivityOnSaveCompleted", правда), как предполагает этот пост, но не повезло.
- Я попытался сделать обе операции одинаковыми (детализация и контактная деятельность), просто показать простой макет без импортов больше, чем os.bundle, app.Activity, content.Intent, view.View и View.Window.
- Я попытался запустить функцию startActivity(), которая вызывает Contact Activity из методов, которые переопределяют некоторые функции (подробно Acvitity вызывается с startActivity из метода, который переопределяет событие click).
- Я попытался поместить / получить некоторые дополнительные данные из Главного в контактную деятельность (вот насколько я в отчаянии).
У меня заканчиваются варианты, и я не могу понять, в чем дело, и я знаю, что не должен сам реализовывать функцию кнопки возврата, так как Android обрабатывает ее для меня. Я нацеливаюсь на SDK версии 16 и выше в своем манифесте, я добавляю короткую версию кода, которая вызывает оба действия:
public class MainActivity extends FragmentActivity implements OnNavigationListener, ClusterManager.OnClusterClickListener<MyItem>, ClusterManager.OnClusterInfoWindowClickListener<MyItem>, ClusterManager.OnClusterItemClickListener<MyItem>, ClusterManager.OnClusterItemInfoWindowClickListener<MyItem>
{
.
.
.
/*Some variables initialized*/
.
.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
.
.
.
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
menuOpt=position;
getData();
//gridView.setVisibility(View.GONE);
if(gridView.getVisibility() == View.VISIBLE) {
toggleView(gridView);
}
}
});
}
public void getData(){
String optString="";
llMatVesp.setVisibility(View.GONE);
switch(menuOpt){
/* In this case the back button to MainActivity works, I manage action bar operations for a particular behaviour of the menu, all options in the switch do */
case 1:
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setCustomView(null);
getResults();
break;
/* In this case the back button of Contact Activity, that's supposed to return to MainActivity doesn't work */
case 2:
Intent conIntent=new Intent(MainActivity.this, Contact.class); startActivity(conIntent);
break;
default:break;
}
}
/*this function brings data from db, add markers to the map, and animates to a certain point
public void getResults(){
.
.
}
/* This functions extract the right data from the marker and make the intent that starts the detail Activity, where the back button works with no problems */
@Override
public void onClusterItemInfoWindowClick(MyItem item) {
showDetail(item.getId(),item.getMenuOpt());
}
public void showDetail(String id, int menuOpt){
Intent showDetail=new Intent(MainActivity.this, ShowDetail.class);
showDetail.putExtra("menuOpt", menuOpt);
showDetail.putExtra("icon", ic);
showDetail.putExtra("id", id);
startActivity(showDetail);
}
}
Контактное действие имеет форму и отправляет электронное письмо, но другое действие, в котором кнопка "Назад" не работает, действие "Условия AndConditions", отображает только простую LinearLayout, и все тут, никакого причудливого кодирования там нет.
1 ответ
Я нашел обходной путь: вам просто нужно переопределить действие по умолчанию для кнопки "Назад", отправив пользователя в "Основное действие" или любое другое, которое вы пожелаете, но вы потеряете порядок возврата в стек заданий, если вы пришли из другого действия. Если ваше второе занятие использует веб-просмотр, оно будет использовать хром-движок, если страница загружается с ошибками, в этом случае добавьте эти флаги к цели, в противном случае игнорируйте строку.
@Override
public void onBackPressed() {
Intent intent = new Intent(SecondActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
return;
}