2013-04-10 3 views
0

У меня есть два вида деятельности: ActivityA и ActivityBОтображение предыдущей активности на кнопку назад нажмите

Activity A содержит три линейных макетов. Нажатие на каждый линейный макет вызывает метод showReport, который начинается ActivityB.

На задней кнопке нажмите ActivityB. Я получаю результат в ActivityA в функции onActivityResult и пытается обновить ActivityA.

Но проблема -

Когда я нажимаю на любой линейной компоновки, то onActivityResult называется и мой resultCode становится равным 0, поэтому условие верно и Activity A вызывается снова.

Как звонить Activity A или как получить условие resultCode быть 0 только если нажать кнопку назад.

Моего код ственного образца

активности A:

int REQUEST_CODE = 2; 

public void showReport(View v) 
    { 
      tag = v.getTag().toString(); 
     Intent intent = new Intent(this, ActivityB.class); 
     intent.putExtra("name", tag); 
     this.setResult(RESULT_OK, intent); 
     startActivityForResult(intent, REQUEST_CODE); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 

     if (resultCode == 0) { 
      Intent in = new Intent(this, ActivityA.class); 
      startActivity(in); 
     } 
    } 

ответ

0

активность A:

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

Если вы в activityA, то почему вы начинаете тоже самое Активность снова?
Во всяком случае, вы можете проверить обратно нажатием кнопки с помощью этого ->

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (resultCode == RESULT_CANCELED) { 
//means back button was pressed in ActivityB 
} 
} 

EDIT Удалить эту строку из showReport

this.setResult(RESULT_OK, intent); 
+0

Но значение 'RESULT_CANCELED' всегда' 0'. Его константа.Поэтому независимо от того, будете ли вы писать 'if (resultCode == 0)' или 'if (resultCode == RESULT_CANCELED)'. Проблема в том, что нажатие на любой линейный макет также дает 'resultCode' как' 0'. –

+0

Нет, его нет. Если ActivityB был успешным, он будет возвращать Result_OK, если вы нажмете кнопку «Назад», то результатом будет Result_cancelled. http://developer.android.com/training/basics/intents/result.html – asloob

+0

'RESULT_CANCELED' является константой, но полученный вами результат resultCode будет меняться. – asloob

0

Попробуйте с некоторой глобальной переменной в ApplicationClass (который будет вызывать первый время, когда ваша заявка будет установлена)

public boolean check =false; 
  • проверка TŪRE значения булевой check в onActivityResult из ActivityA (первый раз его check является false так что не пойдет дальше)
  • при нажатии назад на ActivityB затем установить значение check=true
  • сделать false значение check при звоните ActivityB снова

так ваш activityA будет вызывать только тогда, когда его пришли форма ActivityB

+0

Thanx это разрешило половину моей проблемы. Теперь я могу видеть «ActivityB» при щелчке линейного макета. Но когда я нажимаю кнопку «Активность», я не попадаю в метод 'onActivityResult'' ActivityA'. Обратите внимание, что моя кнопка возврата - это кнопка программного обеспечения, а не аппаратное обеспечение, и она содержит только 'finish()' call, чтобы закончить 'ActivityB', чтобы он возвращался к' ActivityA'. –

+0

@SaurabhJain просто напишите startActivityForResult() в вашей ActivityA's onResume() – dhams

+0

И какой параметр я должен пройти в нем? Если я делаю 'startActivityForResult (null, REQUEST_CODE);', это дает исключение nullpointer. –

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