BackButton не вызывает последнее действие в стеке истории - PullRequest
4 голосов
/ 22 июня 2011

У меня эта ошибка с кнопкой в ​​моих действиях. У всех видов деятельности есть эта проблема. Когда я нажимаю кнопку «Назад», она переходит на домашний экран, а не к последней активности в стеке. Я поместил сообщение журнала, но в некоторых действиях оно не печатает его на LogCat, в этом занятии, опубликованном здесь, оно печатает журнал. Но похоже, что некоторые действия не идут внутри метода.

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

Итак, мой вопрос: как мне решить эту проблему, как заставить его перейти к последнему занятию вместо перехода на домашний экран?

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

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

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
                finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

Я тоже пытался с onBackPressed() методом, но ничего. А также, вместо того, чтобы вызывать финиш, я пытался с новым намерением и вызывал некоторую простоту активности, но тоже ничего.

Я не могу поставить все свои действия здесь, потому что много.
Но вот один, и, может быть, если что-то работает с этим, я могу реализовать на других. Спасибо.

public class MyActivity extends Activity {

    private ListView listview;
    private ImageView imgView;
    private Resources res;
    private Drawable transition;
    private SimpleCursorAdapter adapter;
    private DataHandlerDB handler;
    private SQLiteDatabase db;
    private OpenHelper helper;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);          
        helper = new OpenHelper(this);
        db = helper.getWritableDatabase();
        setBasicContent();

    }

    @Override
    public void onStart() {

        super.onStart();
        helper = new OpenHelper(this);
        db = helper.getWritableDatabase();
        setBasicContent();

    }

    @Override
    public void onDestroy() {

        super.onDestroy();
        DataHandlerDB.selectTopCalls(this).close();
        db.close();
        helper.close();

    }

    @Override
    public void onPause() {

        super.onPause();

    }

    @Override
    public void onStop() {

        super.onStop();
        DataHandlerDB.selectTopCalls(this).close();
        db.close();
        helper.close();

    }

    @Override
    protected void onResume() {

        super.onResume();
        setBasicContent();

    }


    public void setBasicContent() {

        listview = (ListView) findViewById(R.id.list_view);

        Cursor c = DataHandlerDB.selectTopCalls(this);      

        c.moveToFirst();

        startManagingCursor(c);     

        adapter = new SimpleCursorAdapter(this, R.layout.list_item, c,
                new String[] { DataHandlerDB.CONTACT_NAME_COL,
                        DataHandlerDB.CONTACT_NUMBER_COL,
                        DataHandlerDB.CONTACT_DURATION_COL,
                        DataHandlerDB.CONTACT_DATE_COL }, new int[] {
                        R.id.contact_name, R.id.phone_number, R.id.duration,
                        R.id.date });       

        listview.setAdapter(adapter);
    }
}

Вот действие, которое расширяет ActivityGroup и называется так:

tabHost.addTab(tabHost.newTabSpec("three").setIndicator("Filter Options", 
                res.getDrawable(R.drawable.filteroptionsiconfile))
                .setContent(new Intent(this, FilterOptionsGroup.class)));

FilterOptionsGroup.java

public class FilterOptionsGroup extends ActivityGroup {

    public static FilterOptionsGroup group;
    private ArrayList<View> history;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        this.history = new ArrayList<View>();
        group = this;

        View view = getLocalActivityManager().startActivity(
                "FilterOptions",
                new Intent(this, FilterOptions.class)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView();

        replaceView(view);

    }

    public void replaceView(View v) {
        // Adds the old one to history
        history.add(v);         
        // Changes this Groups View to the new View.
        setContentView(v);
    }

}

Ответы [ 4 ]

1 голос
/ 23 июня 2011

Если все ваши действия инкапсулированы в хосте вкладок, и все они размещены на вкладках, то они на самом деле не находятся в стеке.Они расположены на переднем плане, который является главным экраном вкладки, и кнопка «Назад» вернет вас к предыдущему приложению.

0 голосов
/ 11 августа 2011

попробуй позвонить super.onKeyDown(keyCode, event); в начале метода onKeyDown. У меня была похожая проблема, и это было решение

0 голосов
/ 22 июня 2011

Проверьте свой манифест, возможно, вы установили android:noHistory на true

0 голосов
/ 22 июня 2011

Может ли деятельность, которая вызывает это действие, заканчиваться сама собой?Если вы не переопределяете onkeydown, по умолчанию используется кнопка «Назад».Обратите внимание, что вы путаете backButtonPressed с onBackPressed.Используйте аннотацию @Override, чтобы убедиться, что вы переопределяете правильные методы ...

Из источника Android для Activity

public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (getApplicationInfo().targetSdkVersion
                >= Build.VERSION_CODES.ECLAIR) {
            event.startTracking();
        } else {
            onBackPressed();
        }
        return true;
    }
<snip>

......

Итак, вам действительно не нужно ничего делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...