2014-01-23 5 views
0

Я пытаюсь понять учебники с использованием намерений, чтобы открыть java.class активность. Я могу управлять, чтобы открыть свою деятельность, используя этот код:Как закрыть активность Android и вернуться к предыдущему/основному действию?

Intent in = new Intent(MainActivity.this, settingmenu.class); 

    startActivity(in); 
    setResult(Activity.RESULT_OK); 
    finish(); 

В этой деятельности, я планирую иметь edittexts, которые будут использоваться в настройках, но сначала я хочу, чтобы понять, как просто вернуться к прежней деятельности. Мой метод OnClick для моих кнопок играет метод, который заключается в следующем:

public void cancel() 
{ 
    this.finish(); 
    return; 
} 

Однако, при нажатии на кнопку, то приложение падает. Что я делаю по-другому? Несколько уроков говорят, что используйте финиш(), но я чувствую.

+1

Вы должны показать выход LogCat для аварии для точного ответа –

ответ

2

Я хочу, чтобы понять, как просто вернуться к прежней деятельности

Не называйте finish() в первом Activity. Затем, когда пользователь нажимает кнопку «Назад», второй Activity будет закрыт и снят со стека, и будет вызван onResum() первого Activity.

Intent in = new Intent(MainActivity.this, settingmenu.class); 

startActivity(in); 
setResult(Activity.RESULT_OK); 
// finish(); don't call this and the Activity will remain on the stack 

Что касается аварии, вам нужно будет предоставить LogCat и вполне возможно, больше кода

Вы, вероятно, хотите, чтобы прочитать о the Stack, который будет идти долгий путь в понимании того, как Activities являются помещаются и выскользнули. Кроме того, есть очень хорошие разговоры, я считаю, что Ромен Гай на одной из старейших конференций ввода-вывода Google об этом очень полезен. Я постараюсь опубликовать, но вы можете использовать эти термины Google, и вы его найдете.

Activity Docs

Google I/O Navigation and stack Не кто я думал, что это было, но, безусловно, стоит посмотреть.

+0

. Могу ли я добавить метод onResume в свою первую активность? Я этого не делал. – jakeinmn

+0

Нет, это метод 'Activity', который вы можете« переопределить », если это необходимо. Ссылка на docs – codeMagic

+0

Глядя на логарифм, он сказал, что не может найти мой метод, который был на моем методе onClick. Я не думаю, что я добавил onClickListener для этой кнопки ... так что я думаю, что причина. – jakeinmn

0

Когда вы используете «финиш», вы просто уничтожаете действие, и оно не будет в стеке, если вы хотите перейти к предыдущей деятельности, вам нужно использовать другое намерение для запуска или не использовать « закончить "после намерения.

+0

Если я использую другое намерение вернуться, не будет, что сделать два экземпляра activty, так как она была создана, и это было сделано еще раз ? – jakeinmn

+0

вы уничтожаете его, используя финиш, это будет только одна активность. –

0

Чтобы решить мою проблему, я избавился от андроида: onClick = "save()" и вместо этого сделал onclicklistener в методе onCreate во втором упражнении. Испытывая это, он сработал.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.settingmenu); 

    Button tt = (Button)findViewById(R.id.savebutton); 
    tt.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       finish(); 

     } 
    }); 
0
btnBack.setOnClickListener(new OnClickListener(){private void onClick(){ 
Intent intent = new Intent(currentActivity.this, Main.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);}}); 
Смежные вопросы