Bu dersimizde fragment transaction konusuna giriş yapıyoruz.
Transaction’lar fragmentlerimizin activity’lere eklenmesi, çıkarılması, attach/detach olması vs.. gibi işlemlerin genel adıdır.
Fragmentlerdeki tüm transactionlar : ekleme, çıkarılma, replace(yer değiştirme), attach, detach, show ve hide’dır. Bu dersimizde transactionlarndan ilk ikisini yani ekleme ve çıkarmayı öğreniyoruz.
Tüm bu işlemlerde genel olarak yapılacak işlemler şu şekildedir:
1-Önce işlem yapılacak fragment sınıfından bir nesne üretilir.
2- Fragment manager ile transaction başlatılır ve bir transaction nesnesine atanır.
3- Daha sonra yapılacak transaction işlemi oluşturulan bu transaction nesnesi sayesinde yapılır ve commit edilir.
Yapacağımız örnekle ekleme/çıkarma transactionlarının nasıl yapıldığını ve çalışma mantığını öğreneceksiniz. 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.
Faydalı olması dileğiyle…
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> |