Android Back Button работает в некоторых действиях и не работает в других

Я надеюсь, что кто-то может помочь с моей проблемой. Кнопка возврата Android работает в одних действиях и не работает в других. У My MainActivity есть и другие целевые действия, в зависимости от выбранных параметров. Поскольку мое приложение управляет картой, когда я щелкаю по информационному окну маркера, оно переходит к детализации по желанию, а когда я нажимаю кнопку возврата Android, оно возвращается к основной активности в обычном режиме (не путать с кнопка home в панели действий, которую я не хочу реализовывать).

Но когда я нажимаю на "Контакт" или "Условия и положения", и я намерен запускать действия "Контакт / Условия" так же, как и с infowindows, он открывает действие, как обычно, но кнопка "Назад" не Похоже, что он снова открывает контакт / условия и не возвращается к основному виду деятельности. Я искал много постов и добавляю свои наблюдения:

  1. Я не вызываю метод finish() для своей функции MainActivity, поэтому я специально не работаю со стеком активности.
  2. Я попробовал putExtra("finishActivityOnSaveCompleted", правда), как предполагает этот пост, но не повезло.
  3. Я попытался сделать обе операции одинаковыми (детализация и контактная деятельность), просто показать простой макет без импортов больше, чем os.bundle, app.Activity, content.Intent, view.View и View.Window.
  4. Я попытался запустить функцию startActivity(), которая вызывает Contact Activity из методов, которые переопределяют некоторые функции (подробно Acvitity вызывается с startActivity из метода, который переопределяет событие click).
  5. Я попытался поместить / получить некоторые дополнительные данные из Главного в контактную деятельность (вот насколько я в отчаянии).

У меня заканчиваются варианты, и я не могу понять, в чем дело, и я знаю, что не должен сам реализовывать функцию кнопки возврата, так как 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;
}
Другие вопросы по тегам