2013-05-14 19 views
7

, istediğim bu google tutorialİşlem

yapılır Ama bir parçası geçiş öncesinde oluşturulan orada ne benzer olduğunu. Eğer bunu yaparsam geçiş iyi çalışır; ama sadece bir ile bütün ekranı görünür olanı Parçası sahip çalışıyor ve bir düğme (a çizilmiş düğmesi kullanıyorum 7+ API hedefleyen bu yaklaşımı

=====

kullanamazsınız onTouch etkinliği), bir ikinci fragmanı ve tersine daha sonra alternatif.

Ancak ikinci ilk fragmanının yerini zaman ya da boş bir ekran, ya da fragmentTransaction.show ve fragmentTransaction.hide kullanımı ise; Boş ekran almadan önce iki kez geçiş yapabilirim. Ben backstack üzerinde olmasını istemiyorum.

DiceTable diceTable = new DiceTable(); 
Logger logger = new Logger(); 
fragmentTransaction.add(diceTable, DICETABLE_TAG); 
fragmentTransaction.add(logger, LOGGER_TAG); 
fragmentTransaction.add(R.id.fragment_container, logger); 
fragmentTransaction.add(R.id.fragment_container, diceTable); 

Sonra bir yöntem üzerinde (fragmanlardan denir) Ben ne zaman yapacağız:

Ben MainActivity en onCreate konusu parçaları oluşturma

Logger logger = (Logger)fragmentManager.findFragmentByTag(LOGGER_TAG); 
    DiceTable diceTable = (DiceTable)fragmentManager.findFragmentByTag(DICETABLE_TAG); 

    if (diceTable.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, logger); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(diceTable); 
     fragmentTransaction.show(logger); 
    } 
    else if (logger.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, diceTable); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(logger); 
     fragmentTransaction.show(diceTable); 
    } 

Bu Bunu nasıl değil ?

boş ekran fragmanları

değiştirilmesi

cevap

6

deneyin bu şekilde parçaları başlatmak için

private void flipFragments() { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     if (isDiceTableVisible) { 
      ft.hide(mDiceTable); 
      ft.show(mLogger); 
     } else { 
      ft.hide(mLogger); 
      ft.show(mDiceTable); 
     } 
     ft.commit(); 
     isDiceTableVisible = !isDiceTableVisible; 
    } 
1
için Fragman gösterilmiştir değişen iki farklı yöntem birleştirerek

:

  • hide() çağrı farklı Fragment
  • kabın içeriğini değiştirmek için replace() çağrı sonra başka Parçası göstermek için show() çağıran bir Fragment kaldırın.

bir yöntemi seçin ve sopa ile. Bina Esnek UI kılavuzu sadece replace() yöntemini kullanır, bu yüzden show() ve hide() için aramaların tamamını çıkarmak için deneyerek başlayacaktı.

Ayrıca yerine yerine gizle/show kullanmanın yararlı olabileceğinin kısa bir özeti için Android Fragments: When to use hide/show or add/remove/replace?'a bakın.

private void initFragments() { 
    mDiceTable = new DiceTable(); 
    mLogger = new Logger(); 
    isDiceTableVisible = true; 

    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.fragment_container, mDiceTable); 
    ft.add(R.id.fragment_container, mLogger); 
    ft.hide(mLogger); 
    ft.commit(); 
} 

Ve sonra bu şekilde aralarında çevirmek: