2015-06-19 1 views
-3

Я работаю над приложением Android, которое начинается с действия, которое служит в качестве экрана меню (я назову это мероприятие деятельностью меню).Как отменить действие клавиши на Android

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

После того, как я набрал свое имя, я нажал кнопку «Назад», и он возвращается к активности имени с именем, которое все еще присутствует в поле EditText.

Я хотел бы знать, есть ли способ изменить функциональность back key, чтобы избежать перехода к активности имени и вместо этого вернуться к основному действию (иерархия - главное меню - имя).

Кроме того, есть ли способ предотвратить сохранение имени в EditText?

Заранее спасибо.

+0

Я был бы признателен, если бы downvoter сказал бы мне, почему он/она опущен. –

+0

Вероятно, пользователь отказался, потому что у вас нет кода в вашем вопросе. Это хорошая практика на веб-сайте, чтобы добавить код, который поможет понять контекст вашей проблемы. – Deegriz

+0

Какой код я должен вставить здесь? Кажется (мне), как этот вопрос не зависит от кода. –

ответ

0

Я немного смущена иерархией, но в любом случае это то, что вы ищете, если вы хотите, чтобы очистить все предыдущие действия: Clearing Activity Backstack

В противном случае звоните finish() на операцию вы хотите закрыть, прежде чем меняется. Это очистит EditText

+0

Большое спасибо! Итак, finish() разрушает действие, которое он использует на правильном пути? –

+0

Точно. Просто не забудьте позвонить ему ПОСЛЕ того, как вы начали действие, которое вы собираетесь сделать, например: Цель намерения = новое намерение (CurrentActivity.this, ActivityYouAreGoingTo.class); startActivity (намерение); finish(); – Deegriz

+1

Я не думаю, что это оптимальный маршрут, но не вижу, что код трудно узнать наверняка. Меню активности запускает название активности (с использованием намерения/startActivity), после того, как текстовое поле имени заполнено, и пользователь хочет вернуться в меню активности, тогда все, что необходимо, - это нажатие кнопки завершения() или обратной кнопки. Название действия не должно быть обязательным/startActivity - просто закончите. –

2

В вашем имени у вас есть кнопка для отправки данных, не так ли?

И вы, вероятно, что-то там вроде:

Intent in = new Intent(this, menu_activity.class); 
startActivity(in); 

Вы должны удалить, что линии и заменить его finish();

Таким образом, вы предположим, у вас есть следующие:

button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Save the data to whatever you would like (database, variable, etc.) 
     finish(); 
    } 
}); 

Причина этого заключается в том, что когда вы создаете новое намерение, оно помещается в стек активности (в то время как текущая активность «остается» в стеке при hi s, но просто не видно).

Например (A ваше меню деятельности, B это имя):

startIntentA(); ---> stack is: A (activity A is now visible) 
startIntentB(); ---> stack is: AB (activity B is now visible) 
startIntentA(); ---> stack is: ABA (activity A is now visible) 

Итак, когда вы нажимаете кнопку назад, текущая деятельность разрушается и она восходит к последней открытой деятельности на стек:

stack is now ABA 
backButton(); ---> A gets destroyed. Stack is: AB (activity B is now visible) 
backButton(); ---> B gets destroyed. Stack is: A (activity A is now visible) 

Так что, когда вы не начать новую умысел на кнопку на активности name, нет никакой активности, чтобы вернуться к:

startIntentA(); ---> stack is: A (activity A is now visible) 
startIntentB(); ---> stack is: AB (activity B is now visible) 
finish();  ---> stack is: A (the original activity is now visible) 

Когда вы хотели бы сохранить введенный пользователь, даже если они нажали кнопку назад, вы можете переопределить onBackPressed() метод:

@Override 
public void onBackPressed() { 
    // Save the data to whatever you would like (database, variable, etc.) 
    finish(); 
} 

Примечания: вы можете запретить отмену текущей деятельности с задним , установив setCancelable(false);.

+0

Думаю, я понимаю. Таким образом, finish() также отправляет его обратно в предыдущую активность (здесь, menu_activity)? –

+0

@ Да, 'finish()' будет действовать так же, как на заднем пульте. – moffeltje

+0

В этом случае вы хотите: меню запускает имя, имя заполняется, как только пользователь завершает работу, нажав кнопку (скажем, сохранить) - завершение кода заканчивается, что будет поп-имя из стека активности (пауза/стоп/уничтожение). Вы можете захватить текстовые данные либо при ответе на пользователя, нажав кнопку, либо в методах жизненного цикла активности, таких как пауза (и иметь такое же поведение кнопки кнопки) –

 Смежные вопросы

  • Нет связанных вопросов^_^