SORU
5 Temmuz 2012, PERŞEMBE


Nasıl geri yığın eklendiğinde parça devlet koruyabilirsiniz?

İki parça arasında geçiş kukla bir etkinlik hazırladım. FragmentB için FragmentA gelen gittiğinizde, FragmentA arka yığını eklenir. Ben FragmentA döndüğünüzde ancak, (geri tuşuna basarak), tamamen yeni bir FragmentA oluşturulur ve durumuna kaybolur. this soru aynı şeyin peşinde olduğumu hissediyorum, ama tam kod örneği, sorunu kök yardımcı olmak için ekledim:

public class FooActivity extends Activity {
  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(android.R.id.content, new FragmentA());
    transaction.commit();
  }

  public void nextFragment() {
    final FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(android.R.id.content, new FragmentB());
    transaction.addToBackStack(null);
    transaction.commit();
  }

  public static class FragmentA extends Fragment {
    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
      final View main = inflater.inflate(R.layout.main, container, false);
      main.findViewById(R.id.next_fragment_button).setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          ((FooActivity) getActivity()).nextFragment();
        }
      });
      return main;
    }

    @Override public void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      // Save some state!
    }
  }

  public static class FragmentB extends Fragment {
    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
      return inflater.inflate(R.layout.b, container, false);
    }
  }
}

Bazı günlük iletileri ekledi:

07-05 14:28:59.722 D/OMG     ( 1260): FooActivity.onCreate
07-05 14:28:59.742 D/OMG     ( 1260): FragmentA.onCreateView
07-05 14:28:59.742 D/OMG     ( 1260): FooActivity.onResume
<Tap Button on FragmentA>
07-05 14:29:12.842 D/OMG     ( 1260): FooActivity.nextFragment
07-05 14:29:12.852 D/OMG     ( 1260): FragmentB.onCreateView
<Tap 'Back'>
07-05 14:29:16.792 D/OMG     ( 1260): FragmentA.onCreateView

Hiç FragmentA arıyor.ve sen de karşılık verdin ne zaman yeni bir FragmentA oluşturur onSaveİnstanceState. FragmentA kullanıyorum ve ekran kilidi ancak, FragmentA.onSaveİnstanceState denir. Çok garip...ben bir parça geri eklendi bekliyor yanlış yeniden oluşturulması gerekiyor yığını? docs ki:

Bir parça çıkarırken eğer addToBackStack arama yaparsan ise, (), sonra parça durdurulur ve eğer kullanıcı giderse devam edecek geri.

CEVAP
5 Temmuz 2012, PERŞEMBE


Eğer geri dönmek için bir parçasından arka yığını değil, yeniden oluşturmak parçası ama yeniden kullanır aynı örnek ve başlar onCreateView() parça ömrü, Fragment lifecycle.

Eğer devlet saklamak isterseniz örnek değişkenleri kullanmanız gerekir o yüzdendeğilonSaveInstanceState() güveniyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • David MeShow

    David MeShow

    10 EKİM 2006
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008