Я видел довольно много вопросов о SO о фрагментах, и я все еще не могу понять, возможно ли то, что я хочу сделать, и тем более, если мой шаблон дизайна просто испорчен, работать весь процесс. В основном, как и большинство заданных вопросов, у меня есть ActionBar с NavigationTabs (с помощью ActionBarSherlock), затем в каждой вкладке есть FragementActivity, а затем FragmentActivities вытесняют новые фрагменты при выборе строки (я пытаюсь воссоздать iOS Project в Android, и это просто базовое приложение на основе навигации с некоторыми вкладками, которые могут развернуть конкретную информацию). Когда я нажимаю кнопку "Назад" на телефоне, загружается предыдущий фрагмент, но Fragment повторно создает его (поэтому WebServices снова вызывается для каждого представления), и это не требуется, поскольку информация не будет изменяться в предыдущем представлении, когда назад. Поэтому в основном я хочу выяснить, как настроить мои фрагменты, чтобы при нажатии кнопки "Назад" на телефоне предыдущий фрагмент просто затянулся с уже созданными ранее элементами. Ниже мой текущий код:
//This is from my FragmentActivity Class that contains the ActionBar and Tab Selection Control
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
int selectedTab = tab.getPosition();
if (selectedTab == 0) {
SalesMainScreen salesScreen = new SalesMainScreen();
ft.replace(R.id.content, salesScreen);
}
else if (selectedTab == 1) {
ClientMainScreen clientScreen = new ClientMainScreen();
ft.replace(R.id.content, clientScreen);
}.....
//This is within the ClientMainScreen Fragment Class, which handles moving to the Detail Fragment
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do something if Row is clicked
try{
String selectedClientName = clientObject.getString("ClientName");
String selectedClientID = clientObject.getString("ClientID");
String selectedValue = clientObject.getString("ClientValue");
transaction = getFragmentManager().beginTransaction();
ClientDetailScreen detailScreen = new ClientDetailScreen();
detailScreen.clientID = selectedClientID;
detailScreen.clientName = selectedClientName;
detailScreen.clientValue = selectedValue;
int currentID = ((ViewGroup)getView().getParent()).getId();
transaction.replace(currentID,detailScreen);
transaction.addToBackStack(null);
transaction.commit();
}
catch (Exception e) {
e.printStackTrace();
}
}
});....
//And then this is the Client Detail Fragment, with the method being called to Call the Web Service and create thew (since what is displayed on this screen is dependent on what is found in the Web Service
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) {
return inflater.inflate(R.layout.clientdetailscreen, group, false);
}
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Setup Preferences File Link
this.preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
//initialize the table object
mainTable = (TableLayout)getActivity().findViewById(R.id.mainTable);
//setup the detail table
setupRelatedClientSection();
}
Экран клиентской детали может затем развернуться еще раз, используя тот же метод, что и основной экран клиента, но когда я вернусь с этого нового экрана на экран подробных данных, метод seuptRelatedClientSection() снова вызван, и так весь фрагмент перестраивается, когда на самом деле я просто хочу вытащить сохраненную версию этого экрана. Возможно ли это с моей текущей настройкой, или я поступил неправильно?