2015-01-01 2 views
-2

Все,Сбой при движении во время навигации назад

Я выполняю навигацию между 3 экранами с зависимостью друг от друга.

Деятельность A имеет таблицу со списком строк таблицы. Каждая строка имеет событие onclick listener, где в результате получают данные из строки таблицы и переходит к следующему экрану. Активность B.

Активность B начинается с считывания данных из Intent и получения соответствующих изображений & данных и т. Д. И строит макет. Он имеет кнопку, где при считывании данных из текста редактирования и передается в действие C.

Активность C также создает макет на основе данных из намерения.

Я наблюдал навигацию между этими действиями с настройкой родительской активности в файле манифеста.

Теперь, когда я делаю навигацию в действии C в действие B, она рушится, потому что она не может найти данные из намерения, поскольку элемент управления поступает от Child to Parent, а не от родителя к ребенку.

Я понимаю, что функция onCreate Activity B выполняется снова. Поэтому я сохранил onPause() и метод onResume() в Activity B, чтобы провести повторное выполнение. Но не повезло.

Может ли кто-нибудь посоветовать, как обращаться с таким сценарием.

EDIT:

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

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.edit_activity); 
getActionBar().setDisplayHomeAsUpEnabled(true); 
source_activity = this.getIntent().getStringExtra("source_activity"); 
Bundle b = this.getIntent().getExtras(); 
if(b!=null) 
    DashBoardDisplay_l = b.getParcelable("obj"); 
Name_ref=DashBoardDisplay_l.getName(); 
} 

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

protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
overridePendingTransition(R.anim.activity_open_translate,R.anim.activity_close_scale); 
setContentView(R.layout.point_log_activity); 
Intent intent = getIntent(); 
String YourtransferredData = intent.getExtras().getString("ref_name"); 
Log.d(TAG, "ref name "+YourtransferredData); 
Name=YourtransferredData; 
Log.d(TAG, "name value "+Name); 
getActionBar().setDisplayHomeAsUpEnabled(true); 
new BackEndJob().execute(); 
} 

активность B содержит некоторую Intent, который исходит от предыдущего экрана активность А. Таким образом, возвращаясь к деятельности B из Activity C он не смог найти данные из Intent, из-за которых он приводит к исключению нулевого указателя.

Итак, есть ли возможность отображать то, что есть в стеке обратной навигации, а не воссоздавать его с помощью Savedinstance, рекомендованного Dalija.

+0

Пожалуйста Показать код после того, что мы можем направлять вас. – Shvet

+0

Добавьте свой фрагмент кода и журналы – VicJordan

ответ

0

Из вашего описания видно, что следует предотвратить обратную навигацию к Activity B. Поэтому, когда пользователь нажимает кнопку назад в C активности он хотел бы вернуться к деятельности А. Если это так, то вы должны закончить активность B, когда он передает управление активностью С.

... 
    this.startActivity(intent); // start Activity C 
    finish(); 
} 

Отделочной деятельность удалит активность B из навигационного стека и полностью уничтожить Activity B, решив проблему обратной навигации.

Однако, если вы хотите перейти к Activity B, то вы должны использовать onSaveInstanceState() и onRestoreInstanceState() в действии B, чтобы сохранить его состояние.

Recreating Activity

При запуске активность C, активность B останавливается. В этот момент система может решить уничтожить действие B в любое время, если ему необходимо очистить ресурсы. Вы не имеете никакого влияния на этот процесс, и вы не можете его предотвратить.

Вы можете найти более Activity Lifecycle

+0

Спасибо всем, кто ответил. Попробуй этот совет и вернешься назад. – kavuru