2013-05-30 4 views
1

У меня есть класс «bancoActivity», который расширяет Fragment реализует ActionBar.TabListener, который вызывает другой класс «pagamentos» extends Fragment реализует ActionBar.TabListener. Когда я нахожусь в классе «pagamentos» и нажимаю на физическую кнопку «назад», ничего не происходит, и когда я нажимаю снова, приложение заканчивается. Я оставляю там свой код, чтобы ваш анализ мог анализировать. Obrigado.Фрагменты Android не вызывают Backstack

часть bancoActivity:

@Override 
public void onItemClick(AdapterView<?> customviewadapter, View view, int position, long id) { 
    listViewItem item = items.get(position); 
    String Titulo = item.Title; 

    if(Titulo.equals("Pagamentos")) { 
     FragmentManager fragmentManager2 = getFragmentManager(); 
     FragmentTransaction fragmentTransaction2 = fragmentManager2.beginTransaction(); 
     pagamentos fragment2 = new pagamentos(); 
     fragmentTransaction2.hide(bancoActivity.this); 
     fragmentTransaction2.add(android.R.id.content, fragment2); 
     fragmentTransaction2.addToBackStack("banco"); 
     fragmentTransaction2.commit(); 
    } 
} 

часть pagamentos:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getActivity().setContentView(R.layout.pagamentos); 
    FragmentManager fm = getFragmentManager(); 

эти два вида деятельности распространяется и реализует:

public class pagamentos extends Fragment implements ActionBar.TabListener{ 
public class bancoActivity extends Fragment implements ActionBar.TabListener 

ответ

0

Я новичок тоже, но Я возьму на него удар ...

Я думаю, вам нужно создать экземпляр обоих фрагментов из активности, которая их удерживает, и использовать 1 менеджер фрагментов для переключения. Его трудно для меня, чтобы сказать, не весь код, но у меня есть аналогичные установки работает, вот как:

public class MainActivity extends Activity implements ActionBar.TabListener { 

    public static final int SEARCH_FRAG = 1; 
public static final int MAP_FRAG = 2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    fragMan = (FragmentManager) getFragmentManager(); 
    mapFrag = ExtendedMapFragment.newInstance(); 
    searchFrag = SearchFragment.newInstance(); 
    if (mapShown == false) { 
     swapFrags(SEARCH_FRAG); 
    } else { 
     swapFrags(MAP_FRAG); 
    } 
    ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionBar.setDisplayShowTitleEnabled(true); 
    searchTab = actionBar.newTab() 
       .setText(R.string.search_tab_label) 
       .setTabListener(this); 
     actionBar.addTab(searchTab); 
    mapTab = actionBar.newTab() 
      .setText(R.string.map_tab_label) 
      .setTabListener(this); 
     actionBar.addTab(mapTab); 
    if (savedInstanceState != null) { 
     actionBar.setSelectedNavigationItem(savedInstanceState.getInt("currentTab")); 
    } 
    actionBar = null; 

} 

    public void swapFrags(int whatFrag) { 
    if (whatFrag == SEARCH_FRAG) { 
     //switch to frag 1, ie searchFrag 
     FragmentTransaction trans = fragMan.beginTransaction(); 
     trans.replace(R.id.map, searchFrag); 
     mapShown = false; 
     trans.addToBackStack(null); 
     trans.commit(); 
    } 
    if (whatFrag == MAP_FRAG) { 
     //switch to frag 2, ie mapFrag 
     if (lbServ != null) { 
      update.autoCenter(lbServ.getCurrentLatLng()); 
     } 
     FragmentTransaction trans = fragMan.beginTransaction(); 
     trans.replace(R.id.map, mapFrag); 
     mapShown = true; 
     trans.addToBackStack(null); 
     trans.commit(); 
    } 
} 

} 

Метод swapFrags() также вызывается из моего onTabSelected обратного вызова. Я думаю, так как у меня только один менеджер фрагментов, и тот же менеджер вызывает все методы addToBackStack(), он более организован. Когда я открываю приложение, выбираю новую вкладку, а затем удаляю физическую клавишу «назад», она возвращается к предыдущей вкладке, и это то, что вам нужно, нет?

Одна вещь, которую мне сложно изучить с помощью фрагментов, заключается в том, что все вызовы, ключи и т. Д. Сначала идут на активность. Нажмите кнопку на фрагменте, действие, которое удерживает его, сначала получает обратный вызов (независимо от того, использует он это или нет), а затем, если в фрагменте есть слушатель, он также получит вызов, но фрагменты не могут ничего делать вне и транзакции фрагментов включают объекты вне фрагмента.

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

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