Bu dersimizde fragment transaction konusuna devam ediyoruz.
Bugünki dersimizde fragmentlerin attach/detach ve show/hide işlemlerinden bahsetmeye çalıştım.
Fragmentin detach işleminde fragment vardığını sürdürür yani sistemden tamamıyla kaldırılmaz, sadece kullandığı layout yok edilir. Yani kullanıcı fragmentinizi görmese de sistemde varlığını sürdürür. İlgili fragment hala activity’mize attach durumundadır. Ayrıca bu işlemin yapılması için bu fragmentin var olması gerekir. Yani bu işlemi yapmadan önce ilgili fragmentin olup olmadığı kontrol edilmelidir.
Aynı şekilde fragmentin attach işleminde de tam tersi durum gerçekleşir. Activity’e attach olmuş ama layoutu destroyview denilerek yok edilmiş fragmente layoutunu tekrardan veririrz ve kullanıcı fragmenti görmeye başlar. onCreateview methodu çalışır ve ilgili layout fragmente verilir. Bu işlemde de ilgili fragmentin olup olmadığını kontrol etmek gerekir.
Show/Hide methodlarında ise herhangi bir lifecycle methodu tetiklenmez sadece var olan fragmenti kullanıcıya gösterme veya gizleme işlemlerinin yapıldığı transaction çeşitleridir. Bu işlemlerde de yine fragmentin var olup olmadığını kontrol etmek gerekir.
Transactionlar için kullanılan kodları aşağıda paylaştım.
Burda ekleme yaparken yeni fragment nesneleri yaratırken, silme işleminde ekranda var olan fragmentleri verdiğimiz tagler sayesinde bulup silme işlemini yapıyoruz. Silme işleminde sileceğimiz fragmentin var olup olmadığını kontrol etmeyi unutmayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
public class MainActivity extends AppCompatActivity { FragmentManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager=getFragmentManager(); } public void addFragmentA(View v){ FragmentA fragmentA=new FragmentA(); FragmentTransaction transaction=manager.beginTransaction(); transaction.add(R.id.container, fragmentA, "fragA"); transaction.commit(); } public void addFragmentB(View v){ FragmentB fragmentB=new FragmentB(); FragmentTransaction transaction=manager.beginTransaction(); transaction.add(R.id.container, fragmentB, "fragB"); transaction.commit(); } public void removeFragmentA(View v){ FragmentA fragmentA= (FragmentA) manager.findFragmentByTag("fragA"); FragmentTransaction transaction=manager.beginTransaction(); if(fragmentA!=null) { transaction.remove(fragmentA); transaction.commit(); }else{ Toast.makeText(this,"Fragment A bulunamadı", Toast.LENGTH_LONG).show(); } } public void removeFragmentB(View v){ FragmentB fragmentB= (FragmentB) manager.findFragmentByTag("fragB"); FragmentTransaction transaction=manager.beginTransaction(); if(fragmentB!=null) { transaction.remove(fragmentB); transaction.commit(); }else{ Toast.makeText(this,"Fragment B bulunamadı", Toast.LENGTH_LONG).show(); } } public void replaceByFragmentA(View v){ FragmentA fragmentA=new FragmentA(); FragmentTransaction transaction=manager.beginTransaction(); transaction.replace(R.id.container, fragmentA, "fragA"); transaction.commit(); } public void replaceByFragmentB(View v){ FragmentB fragmentB=new FragmentB(); FragmentTransaction transaction=manager.beginTransaction(); transaction.replace(R.id.container, fragmentB, "fragB"); transaction.commit(); } public void attachFragmentA(View v){ FragmentA fragmentA= (FragmentA) manager.findFragmentByTag("fragA"); FragmentTransaction transaction=manager.beginTransaction(); if(fragmentA!=null) { transaction.attach(fragmentA); transaction.commit(); } else{ Toast.makeText(this,"Fragment A bulunamadı", Toast.LENGTH_LONG).show(); } } public void detachFragmentA(View v){ FragmentA fragmentA= (FragmentA) manager.findFragmentByTag("fragA"); FragmentTransaction transaction=manager.beginTransaction(); if(fragmentA!=null) { transaction.detach(fragmentA); transaction.commit(); } else{ Toast.makeText(this,"Fragment A bulunamadı", Toast.LENGTH_LONG).show(); } } public void showFragmentA(View v){ FragmentA fragmentA=(FragmentA) manager.findFragmentByTag("fragA"); FragmentTransaction transaction=manager.beginTransaction(); if(fragmentA!=null){ transaction.show(fragmentA); transaction.commit(); }else{ Toast.makeText(this,"Fragment A bulunamadı", Toast.LENGTH_LONG).show(); } } public void hideFragmentA(View v){ FragmentA fragmentA=(FragmentA) manager.findFragmentByTag("fragA"); FragmentTransaction transaction=manager.beginTransaction(); if(fragmentA!=null){ transaction.hide(fragmentA); transaction.commit(); }else{ Toast.makeText(this,"Fragment A bulunamadı", Toast.LENGTH_LONG).show(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
public class FragmentA extends Fragment { @Override public void onAttach(Context context) { super.onAttach(context); Log.d("EMRE", "fragmentA onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("EMRE", "fragmentA oncreate"); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d("EMRE", "fragmentA oncreateview"); return inflater.inflate(R.layout.fragment_a, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d("EMRE", "fragmentA onActivityCreated"); } @Override public void onStart() { super.onStart(); Log.d("EMRE", "fragmentA onStart"); } @Override public void onResume() { super.onResume(); Log.d("EMRE", "fragmentA onresume"); } @Override public void onPause() { super.onPause(); Log.d("EMRE", "fragmentA onpause"); } @Override public void onStop() { super.onStop(); Log.d("EMRE", "fragmentA onstop"); } @Override public void onDestroy() { super.onDestroy(); Log.d("EMRE", "fragmentA ondestroy "); } @Override public void onDestroyView() { super.onDestroyView(); Log.d("EMRE", "fragmentA ondestroyview"); } @Override public void onDetach() { super.onDetach(); Log.d("EMRE", "fragmentA ondetach"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
public class FragmentB extends Fragment { @Override public void onAttach(Context context) { super.onAttach(context); Log.e("EMRE", "fragmentB onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("EMRE", "fragmentB oncreate"); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e("EMRE", "fragmentB oncreateview"); return inflater.inflate(R.layout.fragment_b, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.e("EMRE", "fragmentB onActivityCreated"); } @Override public void onStart() { super.onStart(); Log.e("EMRE", "fragmentB onStart"); } @Override public void onResume() { super.onResume(); Log.e("EMRE", "fragmentB onresume"); } @Override public void onPause() { super.onPause(); Log.e("EMRE", "fragmentB onpause"); } @Override public void onStop() { super.onStop(); Log.e("EMRE", "fragmentB onstop"); } @Override public void onDestroy() { super.onDestroy(); Log.e("EMRE", "fragmentB ondestroy "); } @Override public void onDestroyView() { super.onDestroyView(); Log.e("EMRE", "fragmentB ondestroyview"); } @Override public void onDetach() { super.onDetach(); Log.e("EMRE", "fragmentB ondetach"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.emrealtunbilek.fragmenttransactions.MainActivity"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EKLE A" android:onClick="addFragmentA"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ÇIKAR A" android:onClick="removeFragmentA"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EKLE B" android:onClick="addFragmentB"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ÇIKAR B" android:onClick="removeFragmentB"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="A ILE DEGISTIR" android:onClick="replaceByFragmentA"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="B ILE DEGISTIR" android:onClick="replaceByFragmentB"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ATTACH A" android:onClick="attachFragmentA"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DETACH A" android:onClick="detachFragmentA"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SHOW A" android:onClick="showFragmentA"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HIDE A" android:onClick="hideFragmentA"/> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/container"> </FrameLayout> </LinearLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ec3" > <TextView android:text="FRAGMENT A" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </LinearLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#3ce" > <TextView android:text="FRAGMENT B" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </LinearLayout> |