{"id":35496,"date":"2025-11-30T10:40:51","date_gmt":"2025-11-30T07:40:51","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35496"},"modified":"2025-11-30T10:40:51","modified_gmt":"2025-11-30T07:40:51","slug":"android-dialogfragment-kapsamli-bir-teknik-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/","title":{"rendered":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber<\/h2>\n<p>Android uygulamalar\u0131nda kullan\u0131c\u0131 ile etkile\u015fim kurman\u0131n ve kritik bilgileri sunman\u0131n en yayg\u0131n yollar\u0131ndan biri dialog pencereleridir. Bu pencereler, kullan\u0131c\u0131dan onay almak, k\u00fc\u00e7\u00fck bir form doldurmas\u0131n\u0131 istemek veya \u00f6nemli bir uyar\u0131 g\u00f6stermek gibi \u00e7e\u015fitli ama\u00e7larla kullan\u0131l\u0131r. Android geli\u015ftirme ekibi, bu t\u00fcr etkile\u015fimleri y\u00f6netmek i\u00e7in <code>DialogFragment<\/code> s\u0131n\u0131f\u0131n\u0131 \u00f6nermektedir. Bu makale, <code>DialogFragment<\/code>&#8216;\u0131n ne oldu\u011funu, neden tercih edilmesi gerekti\u011fini, nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 ve geli\u015fmi\u015f tekniklerini kapsaml\u0131 bir \u015fekilde ele alacakt\u0131r.<\/p>\n<h3>Giri\u015f<\/h3>\n<p>Geleneksel olarak, Android uygulamalar\u0131nda dialoglar do\u011frudan <code>AlertDialog<\/code> veya <code>Dialog<\/code> s\u0131n\u0131flar\u0131 kullan\u0131larak Activity veya Fragment i\u00e7inde olu\u015fturulabilirdi. Ancak bu yakla\u015f\u0131m, \u00f6zellikle ekran d\u00f6nd\u00fcrme gibi yap\u0131land\u0131rma de\u011fi\u015fiklikleri (configuration changes) ve Activity ya\u015fam d\u00f6ng\u00fcs\u00fc y\u00f6netimi s\u00f6z konusu oldu\u011funda bir\u00e7ok sorunu beraberinde getiriyordu. <code>DialogFragment<\/code>, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015f bir <code>Fragment<\/code> alt s\u0131n\u0131f\u0131d\u0131r. Bir <code>Fragment<\/code> olarak, kendi ya\u015fam d\u00f6ng\u00fcs\u00fcne sahiptir ve Activity&#8217;nin veya \u00fcst Fragment&#8217;\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcyle sorunsuz bir \u015fekilde entegre olur. Bu sayede, dialoglar\u0131n durumunu korumak, yap\u0131land\u0131rma de\u011fi\u015fikliklerine dayan\u0131kl\u0131 olmak ve daha mod\u00fcler, yeniden kullan\u0131labilir bile\u015fenler olu\u015fturmak \u00e7ok daha kolay hale gelir.<\/p>\n<h3>DialogFragment Nedir?<\/h3>\n<p><code>DialogFragment<\/code>, bir dialog penceresi g\u00f6r\u00fcnt\u00fclemek i\u00e7in kullan\u0131lan \u00f6zel bir <code>Fragment<\/code> t\u00fcr\u00fcd\u00fcr. Temel olarak, bir <code>Fragment<\/code> gibi davran\u0131r ancak i\u00e7eri\u011fini bir <code>Dialog<\/code> i\u00e7inde sunar. Bu mimari, <code>DialogFragment<\/code>&#8216;a bir\u00e7ok avantaj sa\u011flar:<\/p>\n<p>*   <strong>Ya\u015fam D\u00f6ng\u00fcs\u00fc Y\u00f6netimi:<\/strong> <code>DialogFragment<\/code>, kendi ya\u015fam d\u00f6ng\u00fcs\u00fcne sahip oldu\u011fu i\u00e7in, Activity veya \u00fcst Fragment&#8217;\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc olaylar\u0131na otomatik olarak uyum sa\u011flar. Bu, \u00f6zellikle ekran d\u00f6nd\u00fcrme gibi durumlarda dialogun durumunun kaybolmas\u0131n\u0131 veya uygulaman\u0131n \u00e7\u00f6kmesini engeller.<br \/>\n*   <strong>Yap\u0131land\u0131rma De\u011fi\u015fikliklerine Diren\u00e7:<\/strong> Bir Activity yeniden olu\u015fturuldu\u011funda (\u00f6rne\u011fin ekran d\u00f6nd\u00fcr\u00fcld\u00fc\u011f\u00fcnde), <code>DialogFragment<\/code> otomatik olarak yeniden olu\u015fturulur ve durumunu korur. Bu, geli\u015ftiricilerin dialog durumunu manuel olarak kaydetme ve geri y\u00fckleme y\u00fck\u00fcnden kurtar\u0131r.<br \/>\n*   <strong>Mod\u00fclerlik ve Yeniden Kullan\u0131labilirlik:<\/strong> Dialog mant\u0131\u011f\u0131, ayr\u0131 bir <code>DialogFragment<\/code> s\u0131n\u0131f\u0131nda kaps\u00fcllendi\u011fi i\u00e7in, ayn\u0131 dialogu farkl\u0131 Activity veya Fragment&#8217;larda kolayca yeniden kullanmak m\u00fcmk\u00fcnd\u00fcr.<br \/>\n*   <strong>Back Stack Entegrasyonu:<\/strong> <code>DialogFragment<\/code>, <code>FragmentManager<\/code> taraf\u0131ndan y\u00f6netildi\u011fi i\u00e7in, di\u011fer <code>Fragment<\/code>&#8216;lar gibi back stack&#8217;e eklenebilir. Bu, kullan\u0131c\u0131 geri tu\u015funa bast\u0131\u011f\u0131nda dialogun kapat\u0131lmas\u0131n\u0131 veya belirli bir s\u0131raya g\u00f6re g\u00f6sterilmesini sa\u011flar.<\/p>\n<p><code>DialogFragment<\/code> genellikle, <code>AlertDialog<\/code> veya \u00f6zel bir <code>Dialog<\/code> nesnesini kendi <code>onCreateDialog()<\/code> y\u00f6nteminde olu\u015fturarak \u00e7al\u0131\u015f\u0131r. Alternatif olarak, <code>onCreateView()<\/code> y\u00f6ntemini ge\u00e7ersiz k\u0131larak \u00f6zel bir layout da g\u00f6r\u00fcnt\u00fcleyebilir.<\/p>\n<h3>Temel Kullan\u0131m<\/h3>\n<p><code>DialogFragment<\/code> kullanmak olduk\u00e7a basittir ve birka\u00e7 temel ad\u0131mdan olu\u015fur.<\/p>\n<h4>DialogFragment S\u0131n\u0131f\u0131n\u0131 Olu\u015fturma<\/h4>\n<p>\u00d6ncelikle, <code>DialogFragment<\/code> s\u0131n\u0131f\u0131ndan t\u00fcreyen kendi dialog s\u0131n\u0131f\u0131n\u0131z\u0131 olu\u015fturman\u0131z gerekir. Bu s\u0131n\u0131f i\u00e7inde, dialogun nas\u0131l g\u00f6r\u00fcnece\u011fini ve davranaca\u011f\u0131n\u0131 tan\u0131mlars\u0131n\u0131z.<\/p>\n<pre><code class=\"language-java\">import android.app.Dialog;\nimport android.os.Bundle;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.fragment.app.DialogFragment;\n\npublic class MyAlertDialogFragment extends DialogFragment {\n\n    \/\/ DialogFragment'a veri g\u00f6ndermek i\u00e7in newInstance metodu \u00f6nerilir.\n    public static MyAlertDialogFragment newInstance(String title, String message) {\n        MyAlertDialogFragment fragment = new MyAlertDialogFragment();\n        Bundle args = new Bundle();\n        args.putString(\"title\", title);\n        args.putString(\"message\", message);\n        fragment.setArguments(args);\n        return fragment;\n    }\n\n    @NonNull\n    @Override\n    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {\n        \/\/ Arg\u00fcmanlar\u0131 al\n        String title = getArguments().getString(\"title\", \"Uyar\u0131\");\n        String message = getArguments().getString(\"message\", \"Bu bir uyar\u0131 mesaj\u0131d\u0131r.\");\n\n        \/\/ AlertDialog.Builder kullanarak dialogu olu\u015ftur\n        AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());\n        builder.setTitle(title)\n               .setMessage(message)\n               .setPositiveButton(\"Tamam\", (dialog, id) -> {\n                   \/\/ Kullan\u0131c\u0131 Tamam d\u00fc\u011fmesine bast\u0131\u011f\u0131nda yap\u0131lacaklar\n                   \/\/ \u00d6rne\u011fin, host Activity'ye bilgi g\u00f6nderebiliriz.\n                   \/\/ ((MyActivity) requireActivity()).onPositiveButtonClick();\n                   dismiss(); \/\/ Dialogu kapat\n               })\n               .setNegativeButton(\"\u0130ptal\", (dialog, id) -> {\n                   \/\/ Kullan\u0131c\u0131 \u0130ptal d\u00fc\u011fmesine bast\u0131\u011f\u0131nda yap\u0131lacaklar\n                   dismiss(); \/\/ Dialogu kapat\n               });\n\n        \/\/ Olu\u015fturulan dialogu d\u00f6nd\u00fcr\n        return builder.create();\n    }\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>MyAlertDialogFragment<\/code> ad\u0131nda bir <code>DialogFragment<\/code> olu\u015fturulmu\u015ftur.<br \/>\n*   <code>newInstance()<\/code> metodu, dialoga arg\u00fcman (ba\u015fl\u0131k ve mesaj) g\u00f6ndermek i\u00e7in \u00f6nerilen bir yoldur. Bu, dialogun yeniden olu\u015fturulmas\u0131 durumunda (\u00f6rne\u011fin ekran d\u00f6nd\u00fcrme) verilerin kaybolmamas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>onCreateDialog()<\/code> metodu, <code>DialogFragment<\/code>&#8216;\u0131n kalbidir. Bu metodun amac\u0131, g\u00f6r\u00fcnt\u00fclenecek <code>Dialog<\/code> nesnesini olu\u015fturmak ve d\u00f6nd\u00fcrmektir. Burada <code>AlertDialog.Builder<\/code> kullan\u0131larak basit bir uyar\u0131 dialogu olu\u015fturulmu\u015ftur. <code>requireActivity()<\/code> metodu, <code>DialogFragment<\/code>&#8216;\u0131n ba\u011fl\u0131 oldu\u011fu Activity&#8217;yi g\u00fcvenli bir \u015fekilde alman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>DialogFragment&#8217;\u0131 G\u00f6sterme<\/h4>\n<p><code>DialogFragment<\/code>&#8216;\u0131 Activity veya Fragment i\u00e7inden g\u00f6stermek i\u00e7in <code>show()<\/code> metodunu kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-java\">import androidx.appcompat.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.widget.Button;\n\npublic class MainActivity extends AppCompatActivity {\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n\n        Button showDialogButton = findViewById(R.id.showDialogButton);\n        showDialogButton.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                MyAlertDialogFragment dialogFragment = \n                    MyAlertDialogFragment.newInstance(\"Onay Gerekli\", \"\u0130\u015fleme devam etmek istiyor musunuz?\");\n                dialogFragment.show(getSupportFragmentManager(), \"myAlertDialog\");\n            }\n        });\n    }\n\n    \/\/ Host Activity'den dialog olaylar\u0131n\u0131 dinlemek i\u00e7in bir metod (\u00f6rnek)\n    public void onPositiveButtonClick() {\n        \/\/ Dialog'dan gelen \"Tamam\" olay\u0131n\u0131 burada i\u015fleyebiliriz\n        \/\/ Toast.makeText(this, \"Tamam d\u00fc\u011fmesine bas\u0131ld\u0131!\", Toast.LENGTH_SHORT).show();\n    }\n}<\/code><\/pre>\n<p>*   <code>MyAlertDialogFragment<\/code> \u00f6rne\u011fi olu\u015fturulur. <code>newInstance()<\/code> metodu kullan\u0131larak ba\u015fl\u0131k ve mesaj arg\u00fcmanlar\u0131 iletilir.<br \/>\n*   <code>show()<\/code> metodu \u00e7a\u011fr\u0131l\u0131r. Bu metod iki arg\u00fcman al\u0131r:<br \/>\n    *   <code>FragmentManager<\/code>: DialogFragment&#8217;\u0131 y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Activity i\u00e7indeyseniz <code>getSupportFragmentManager()<\/code> (AppCompatActivity i\u00e7in) veya <code>getFragmentManager()<\/code> (FragmentActivity i\u00e7in) kullan\u0131rs\u0131n\u0131z. Bir Fragment i\u00e7inden g\u00f6steriyorsan\u0131z <code>getParentFragmentManager()<\/code> veya <code>getChildFragmentManager()<\/code> kullanabilirsiniz.<br \/>\n    *   <code>tag<\/code>: DialogFragment&#8217;\u0131 tan\u0131mlayan benzersiz bir string etiketi. Bu etiket, daha sonra <code>findFragmentByTag()<\/code> ile dialoga eri\u015fmek i\u00e7in kullan\u0131labilir.<\/p>\n<h4>Ya\u015fam D\u00f6ng\u00fcs\u00fc<\/h4>\n<p><code>DialogFragment<\/code>, bir <code>Fragment<\/code> oldu\u011fu i\u00e7in standart <code>Fragment<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc metodlar\u0131na sahiptir (<code>onCreate<\/code>, <code>onStart<\/code>, <code>onResume<\/code>, vb.). Ancak, dialoga \u00f6zel baz\u0131 metodlar\u0131 da vard\u0131r:<\/p>\n<p>*   <strong><code>onCreateDialog(Bundle savedInstanceState)<\/code>:<\/strong> Bu metod, dialog nesnesini olu\u015fturdu\u011funuz yerdir. Sadece dialogun kendisiyle ilgilenir.<br \/>\n*   <strong><code>onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)<\/code>:<\/strong> E\u011fer <code>onCreateDialog()<\/code> yerine \u00f6zel bir layout kullanarak bir dialog olu\u015fturmak isterseniz, bu metodu ge\u00e7ersiz k\u0131lars\u0131n\u0131z. Bu durumda, <code>DialogFragment<\/code> bir <code>Dialog<\/code> yerine normal bir <code>Fragment<\/code> gibi davran\u0131r ve layout&#8217;u bir <code>Dialog<\/code> penceresinde g\u00f6sterir.<br \/>\n*   <strong><code>onDismiss(DialogInterface dialog)<\/code>:<\/strong> Dialog kapat\u0131ld\u0131\u011f\u0131nda (\u00f6rne\u011fin kullan\u0131c\u0131 bir d\u00fc\u011fmeye bast\u0131\u011f\u0131nda veya geri tu\u015funa bast\u0131\u011f\u0131nda) \u00e7a\u011fr\u0131l\u0131r. Dialog kapat\u0131ld\u0131ktan sonra yap\u0131lmas\u0131 gereken i\u015flemleri burada tan\u0131mlayabilirsiniz.<br \/>\n*   <strong><code>onCancel(DialogInterface dialog)<\/code>:<\/strong> Dialog iptal edildi\u011finde (\u00f6rne\u011fin kullan\u0131c\u0131 dialogun d\u0131\u015f\u0131na dokundu\u011funda veya geri tu\u015funa bast\u0131\u011f\u0131nda ve <code>setCancelable(true)<\/code> ise) \u00e7a\u011fr\u0131l\u0131r. <code>onDismiss()<\/code>&#8216;ten \u00f6nce \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<p><code>DialogFragment<\/code>&#8216;\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc, host Activity veya Fragment&#8217;\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcyle uyumlu \u00e7al\u0131\u015f\u0131r. Bu, yap\u0131land\u0131rma de\u011fi\u015fiklikleri (\u00f6rne\u011fin ekran d\u00f6nd\u00fcrme) s\u0131ras\u0131nda dialogun otomatik olarak yeniden olu\u015fturulmas\u0131n\u0131 ve durumunu korumas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Farkl\u0131 Dialog T\u00fcrleri Olu\u015fturma<\/h3>\n<p><code>DialogFragment<\/code>, sadece basit <code>AlertDialog<\/code>&#8216;lar i\u00e7in de\u011fil, ayn\u0131 zamanda daha karma\u015f\u0131k veya \u00f6zelle\u015ftirilmi\u015f dialoglar i\u00e7in de esneklik sunar.<\/p>\n<h4>AlertDialog Kullanarak Basit Dialoglar<\/h4>\n<p>Yukar\u0131daki \u00f6rnekte g\u00f6sterildi\u011fi gibi, <code>AlertDialog.Builder<\/code> s\u0131n\u0131f\u0131, \u00e7e\u015fitli d\u00fc\u011fmeler, ba\u015fl\u0131klar, mesajlar ve hatta liste \u00f6\u011feleri veya \u00f6zel g\u00f6r\u00fcn\u00fcmlerle basit ama g\u00fc\u00e7l\u00fc dialoglar olu\u015fturmak i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-java\">\/\/ onCreateDialog i\u00e7inde\nAlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());\nbuilder.setTitle(\"Ba\u015fl\u0131k\")\n       .setMessage(\"Bir \u015feyler oldu.\")\n       .setPositiveButton(\"Evet\", (dialog, id) -> { \/<em> Evet'e bas\u0131ld\u0131 <\/em>\/ })\n       .setNegativeButton(\"Hay\u0131r\", (dialog, id) -> { \/<em> Hay\u0131r'a bas\u0131ld\u0131 <\/em>\/ })\n       .setNeutralButton(\"Belki\", (dialog, id) -> { \/<em> Belki'ye bas\u0131ld\u0131 <\/em>\/ });\n\/\/ \u0130ste\u011fe ba\u011fl\u0131 olarak bir ikon ekleyebiliriz\n\/\/ builder.setIcon(R.drawable.ic_warning);\nreturn builder.create();<\/code><\/pre>\n<h4>\u00d6zel Layout Kullanarak Dialoglar<\/h4>\n<p>Bazen <code>AlertDialog<\/code>&#8216;un sundu\u011fu se\u00e7enekler yeterli gelmeyebilir ve tamamen \u00f6zel bir kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip bir dialoga ihtiyac\u0131n\u0131z olabilir. Bu durumda, <code>onCreateDialog()<\/code> yerine <code>onCreateView()<\/code> metodunu kullan\u0131rs\u0131n\u0131z.<\/p>\n<p>\u00d6nce \u00f6zel dialog layout&#8217;unuzu (<code>dialog_custom_layout.xml<\/code> gibi) olu\u015fturun:<\/p>\n<pre><code class=\"language-xml\"><!-- res\/layout\/dialog_custom_layout.xml -->\n<LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:padding=\"16dp\">\n\n    <TextView\n        android:id=\"@+id\/dialog_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"\u00d6zel Dialog Ba\u015fl\u0131\u011f\u0131\"\n        android:textSize=\"20sp\"\n        android:textStyle=\"bold\"\n        android:layout_marginBottom=\"8dp\"\/>\n\n    <EditText\n        android:id=\"@+id\/edit_text_input\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Bir \u015feyler yaz\u0131n\"\/>\n\n    <Button\n        android:id=\"@+id\/dialog_ok_button\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Kaydet\"\n        android:layout_gravity=\"end\"\n        android:layout_marginTop=\"16dp\"\/>\n\n<\/LinearLayout><\/code><\/pre>\n<p>Ard\u0131ndan, <code>DialogFragment<\/code> s\u0131n\u0131f\u0131n\u0131zda <code>onCreateView()<\/code> metodunu ge\u00e7ersiz k\u0131l\u0131n:<\/p>\n<pre><code class=\"language-java\">import android.app.Dialog;\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.TextView;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.fragment.app.DialogFragment;\n\npublic class MyCustomDialogFragment extends DialogFragment {\n\n    public static MyCustomDialogFragment newInstance(String initialText) {\n        MyCustomDialogFragment fragment = new MyCustomDialogFragment();\n        Bundle args = new Bundle();\n        args.putString(\"initialText\", initialText);\n        fragment.setArguments(args);\n        return fragment;\n    }\n\n    @Nullable\n    @Override\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\n        \/\/ \u00d6zel layout'u inflate et\n        View view = inflater.inflate(R.layout.dialog_custom_layout, container, false);\n\n        \/\/ Layout i\u00e7indeki bile\u015fenlere eri\u015f\n        TextView titleTextView = view.findViewById(R.id.dialog_title);\n        EditText inputEditText = view.findViewById(R.id.edit_text_input);\n        Button okButton = view.findViewById(R.id.dialog_ok_button);\n\n        \/\/ Arg\u00fcmanlardan gelen veriyi ayarla\n        String initialText = getArguments().getString(\"initialText\", \"\");\n        inputEditText.setText(initialText);\n\n        \/\/ D\u00fc\u011fme t\u0131klama olay\u0131n\u0131 ayarla\n        okButton.setOnClickListener(v -> {\n            String inputText = inputEditText.getText().toString();\n            \/\/ Host Activity\/Fragment'a veriyi g\u00f6nder\n            if (getActivity() instanceof CustomDialogListener) {\n                ((CustomDialogListener) getActivity()).onCustomDialogInput(inputText);\n            }\n            dismiss(); \/\/ Dialogu kapat\n        });\n\n        \/\/ Dialog'un ba\u015fl\u0131\u011f\u0131n\u0131 gizlemek istiyorsan\u0131z\n        if (getDialog() != null && getDialog().getWindow() != null) {\n            getDialog().getWindow().requestFeature(STYLE_NO_TITLE);\n        }\n\n        return view;\n    }\n\n    \/\/ Host Activity\/Fragment ile ileti\u015fim i\u00e7in aray\u00fcz\n    public interface CustomDialogListener {\n        void onCustomDialogInput(String input);\n    }\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131mda, <code>onCreateDialog()<\/code> metodunu ge\u00e7ersiz k\u0131lmazs\u0131n\u0131z. Bunun yerine, <code>onCreateView()<\/code> i\u00e7inde \u00f6zel layout&#8217;unuzu \u015fi\u015firir (inflate eder) ve bu layout&#8217;u d\u00f6nd\u00fcr\u00fcrs\u00fcn\u00fcz. Dialogun ba\u015fl\u0131\u011f\u0131n\u0131 gizlemek isterseniz <code>getDialog().getWindow().requestFeature(STYLE_NO_TITLE)<\/code> kullanabilirsiniz.<\/p>\n<h4>Tarih ve Saat Se\u00e7ici Dialoglar\u0131 (DatePickerDialog, TimePickerDialog)<\/h4>\n<p>Android, tarih ve saat se\u00e7imi i\u00e7in \u00f6zel dialog s\u0131n\u0131flar\u0131 sa\u011flar: <code>DatePickerDialog<\/code> ve <code>TimePickerDialog<\/code>. Bunlar\u0131 <code>DialogFragment<\/code> ile sarmalamak, ya\u015fam d\u00f6ng\u00fcs\u00fc y\u00f6netimini ve yap\u0131land\u0131rma de\u011fi\u015fikliklerine direnci kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-java\">import android.app.DatePickerDialog;\nimport android.app.Dialog;\nimport android.os.Bundle;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.fragment.app.DialogFragment;\nimport java.util.Calendar;\n\npublic class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {\n\n    public interface DatePickerListener {\n        void onDateSelected(int year, int month, int day);\n    }\n\n    private DatePickerListener listener;\n\n    @Override\n    public void onAttach(@NonNull Context context) {\n        super.onAttach(context);\n        try {\n            listener = (DatePickerListener) context;\n        } catch (ClassCastException e) {\n            throw new ClassCastException(context.toString() + \" must implement DatePickerListener\");\n        }\n    }\n\n    @NonNull\n    @Override\n    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {\n        \/\/ Varsay\u0131lan tarihi ayarla\n        final Calendar c = Calendar.getInstance();\n        int year = c.get(Calendar.YEAR);\n        int month = c.get(Calendar.MONTH);\n        int day = c.get(Calendar.DAY_OF_MONTH);\n\n        \/\/ DatePickerDialog'u olu\u015ftur ve d\u00f6nd\u00fcr\n        return new DatePickerDialog(requireActivity(), this, year, month, day);\n    }\n\n    @Override\n    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {\n        \/\/ Se\u00e7ilen tarihi host Activity\/Fragment'a g\u00f6nder\n        if (listener != null) {\n            listener.onDateSelected(year, month, dayOfMonth);\n        }\n    }\n}<\/code><\/pre>\n<p>Host Activity bu dialogu g\u00f6stermek i\u00e7in:<\/p>\n<pre><code class=\"language-java\">\/\/ MainActivity i\u00e7inde\npublic class MainActivity extends AppCompatActivity implements DatePickerFragment.DatePickerListener {\n    \/\/ ...\n    public void showDatePickerDialog(View v) {\n        DialogFragment newFragment = new DatePickerFragment();\n        newFragment.show(getSupportFragmentManager(), \"datePicker\");\n    }\n\n    @Override\n    public void onDateSelected(int year, int month, int day) {\n        \/\/ Se\u00e7ilen tarihi burada i\u015fleyin\n        \/\/ Toast.makeText(this, \"Se\u00e7ilen tarih: \" + day + \"\/\" + (month + 1) + \"\/\" + year, Toast.LENGTH_SHORT).show();\n    }\n}<\/code><\/pre>\n<p>Burada <code>DatePickerFragment<\/code>, <code>DatePickerDialog.OnDateSetListener<\/code> aray\u00fcz\u00fcn\u00fc uygular ve <code>onDateSet()<\/code> metodunda se\u00e7ilen tarihi host Activity&#8217;ye bir aray\u00fcz (interface) arac\u0131l\u0131\u011f\u0131yla iletir. <code>onAttach()<\/code> metodu, host Activity&#8217;nin bu aray\u00fcz\u00fc uygulad\u0131\u011f\u0131ndan emin olmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h3>DialogFragment ile Veri \u0130leti\u015fimi<\/h3>\n<p>Dialoglar genellikle kullan\u0131c\u0131dan veri al\u0131r veya kullan\u0131c\u0131 eylemlerini host Activity\/Fragment&#8217;a bildirmesi gerekir. <code>DialogFragment<\/code> ile host aras\u0131nda veri ileti\u015fimi i\u00e7in birka\u00e7 y\u00f6ntem vard\u0131r.<\/p>\n<h4>Host Activity\/Fragment&#8217;a Veri G\u00f6nderme<\/h4>\n<p><strong>1. Interface Kullan\u0131m\u0131 (\u00d6nerilen Y\u00f6ntem):<\/strong><br \/>\nBu, <code>DialogFragment<\/code> ile host aras\u0131nda veri ileti\u015fimi i\u00e7in en esnek ve sa\u011flam y\u00f6ntemdir.<\/p>\n<p>*   <code>DialogFragment<\/code> i\u00e7inde bir aray\u00fcz (interface) tan\u0131mlay\u0131n.<br \/>\n*   Host Activity veya Fragment bu aray\u00fcz\u00fc uygular.<br \/>\n*   <code>DialogFragment<\/code>&#8216;\u0131n <code>onAttach()<\/code> metodunda, host&#8217;un bu aray\u00fcz\u00fc uygulad\u0131\u011f\u0131ndan emin olun ve bir referans saklay\u0131n.<br \/>\n*   Dialog i\u00e7indeki olaylar (\u00f6rne\u011fin d\u00fc\u011fme t\u0131klamalar\u0131) ger\u00e7ekle\u015fti\u011finde, aray\u00fcz metodlar\u0131n\u0131 \u00e7a\u011f\u0131rarak veriyi host&#8217;a iletin.<\/p>\n<p>\u00d6rnek (yukar\u0131daki <code>MyCustomDialogFragment<\/code>&#8216;tan):<\/p>\n<pre><code class=\"language-java\">public class MyCustomDialogFragment extends DialogFragment {\n    \/\/ ...\n    public interface CustomDialogListener {\n        void onCustomDialogInput(String input);\n    }\n\n    private CustomDialogListener listener;\n\n    @Override\n    public void onAttach(@NonNull Context context) {\n        super.onAttach(context);\n        \/\/ Host Activity'nin aray\u00fcz\u00fc uygulad\u0131\u011f\u0131ndan emin olun\n        try {\n            listener = (CustomDialogListener) context;\n        } catch (ClassCastException e) {\n            throw new ClassCastException(context.toString() + \" must implement CustomDialogListener\");\n        }\n    }\n\n    @Override\n    public void onDetach() {\n        super.onDetach();\n        listener = null; \/\/ Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in referans\u0131 temizle\n    }\n\n    \/\/ onCreateView i\u00e7inde, \u00f6rne\u011fin bir butona t\u0131kland\u0131\u011f\u0131nda:\n    \/\/ okButton.setOnClickListener(v -> {\n    \/\/     String inputText = inputEditText.getText().toString();\n    \/\/     if (listener != null) {\n    \/\/         listener.onCustomDialogInput(inputText);\n    \/\/     }\n    \/\/     dismiss();\n    \/\/ });\n    \/\/ ...\n}<\/code><\/pre>\n<p>Host Activity\/Fragment:<\/p>\n<pre><code class=\"language-java\">public class MainActivity extends AppCompatActivity implements MyCustomDialogFragment.CustomDialogListener {\n    \/\/ ...\n    @Override\n    public void onCustomDialogInput(String input) {\n        \/\/ Dialog'dan gelen veriyi burada i\u015fleyin\n        \/\/ Toast.makeText(this, \"Dialog'dan gelen input: \" + input, Toast.LENGTH_SHORT).show();\n    }\n}<\/code><\/pre>\n<p><strong>2. ViewModel Kullan\u0131m\u0131 (Modern Y\u00f6ntem):<\/strong><br \/>\nModern Android geli\u015ftirme pratiklerinde, <code>ViewModel<\/code> ve <code>LiveData<\/code> (veya Kotlin Flow) kullanarak veri ileti\u015fimi daha temiz ve ya\u015fam d\u00f6ng\u00fcs\u00fcne duyarl\u0131 bir \u015fekilde yap\u0131labilir. Host Activity\/Fragment ve <code>DialogFragment<\/code>, ayn\u0131 <code>ViewModel<\/code>&#8216;\u0131 payla\u015fabilir.<\/p>\n<pre><code class=\"language-java\">\/\/ Shared ViewModel\npublic class SharedViewModel extends ViewModel {\n    private final MutableLiveData<String> _dialogResult = new MutableLiveData<>();\n    public LiveData<String> dialogResult = _dialogResult;\n\n    public void setDialogResult(String result) {\n        _dialogResult.setValue(result);\n    }\n}\n\n\/\/ DialogFragment i\u00e7inde\npublic class MyViewModelDialogFragment extends DialogFragment {\n    private SharedViewModel sharedViewModel;\n\n    @Override\n    public void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        \/\/ Host Activity'nin ViewModel'\u0131n\u0131 al\n        sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);\n    }\n\n    @NonNull\n    @Override\n    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {\n        \/\/ ... (AlertDialog.Builder \u00f6rne\u011fi)\n        builder.setPositiveButton(\"Tamam\", (dialog, id) -> {\n            sharedViewModel.setDialogResult(\"Dialog'dan gelen veri!\");\n            dismiss();\n        });\n        return builder.create();\n    }\n}\n\n\/\/ Host Activity\/Fragment i\u00e7inde\npublic class MainActivity extends AppCompatActivity {\n    private SharedViewModel sharedViewModel;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n\n        sharedViewModel = new ViewModelProvider(this).get(SharedViewModel.class);\n        sharedViewModel.dialogResult.observe(this, result -> {\n            if (result != null) {\n                \/\/ Dialog'dan gelen veriyi burada i\u015fleyin\n                \/\/ Toast.makeText(this, \"ViewModel'dan gelen: \" + result, Toast.LENGTH_SHORT).show();\n                sharedViewModel.setDialogResult(null); \/\/ Veriyi s\u0131f\u0131rla\n            }\n        });\n\n        findViewById(R.id.showDialogButton).setOnClickListener(v -> {\n            new MyViewModelDialogFragment().show(getSupportFragmentManager(), \"viewModelDialog\");\n        });\n    }\n}<\/code><\/pre>\n<p>Bu y\u00f6ntem, \u00f6zellikle karma\u015f\u0131k veri ak\u0131\u015flar\u0131 ve farkl\u0131 ya\u015fam d\u00f6ng\u00fclerine sahip bile\u015fenler aras\u0131nda ileti\u015fim kurarken \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p><strong>3. Target Fragment Kullan\u0131m\u0131 (Eski Y\u00f6ntem):<\/strong><br \/>\n<code>setTargetFragment()<\/code> ve <code>getTargetFragment()<\/code> metodlar\u0131, bir <code>Fragment<\/code>&#8216;\u0131n ba\u015fka bir <code>Fragment<\/code>&#8216;a referans vermesini sa\u011flar. Ancak, bu y\u00f6ntem <code>Fragment<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fcyle ilgili sorunlara yol a\u00e7abilece\u011fi ve daha modern yakla\u015f\u0131mlar (ViewModel) oldu\u011fu i\u00e7in art\u0131k \u00f6nerilmemektedir. Genellikle <code>Fragment<\/code>&#8216;lar aras\u0131nda veri aktar\u0131m\u0131 i\u00e7in <code>ViewModel<\/code> veya <code>Fragment Result API<\/code> (AndroidX 1.3.0+) tercih edilmelidir.<\/p>\n<h4>DialogFragment&#8217;a Veri G\u00f6nderme<\/h4>\n<p><code>DialogFragment<\/code>&#8216;a veri g\u00f6ndermenin en g\u00fcvenli ve \u00f6nerilen yolu, bir <code>Bundle<\/code> kullanarak arg\u00fcmanlar\u0131 ayarlamakt\u0131r.<\/p>\n<pre><code class=\"language-java\">\/\/ MyAlertDialogFragment i\u00e7inde newInstance metoduna dikkat edin:\npublic static MyAlertDialogFragment newInstance(String title, String message) {\n    MyAlertDialogFragment fragment = new MyAlertDialogFragment();\n    Bundle args = new Bundle();\n    args.putString(\"title\", title);\n    args.putString(\"message\", message);\n    fragment.setArguments(args); \/\/ Arg\u00fcmanlar\u0131 ayarla\n    return fragment;\n}\n\n\/\/ onCreateDialog veya onCreateView i\u00e7inde arg\u00fcmanlar\u0131 al:\n@Override\npublic Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {\n    String title = getArguments().getString(\"title\", \"Varsay\u0131lan Ba\u015fl\u0131k\");\n    String message = getArguments().getString(\"message\", \"Varsay\u0131lan Mesaj\");\n    \/\/ ... dialogu olu\u015ftur\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, <code>DialogFragment<\/code>&#8216;\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca (\u00f6rne\u011fin yap\u0131land\u0131rma de\u011fi\u015fiklikleri sonras\u0131 yeniden olu\u015fturuldu\u011funda) arg\u00fcmanlar\u0131n\u0131 korumas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Geli\u015fmi\u015f Kullan\u0131m ve \u0130pu\u00e7lar\u0131<\/h3>\n<p><code>DialogFragment<\/code>&#8216;\u0131n temel kullan\u0131m\u0131n\u0131n \u00f6tesinde, daha \u00f6zelle\u015ftirilmi\u015f senaryolar i\u00e7in bilmeniz gereken baz\u0131 geli\u015fmi\u015f teknikler vard\u0131r.<\/p>\n<h4>DialogFragment&#8217;\u0131n Boyutunu ve Konumunu Ayarlama<\/h4>\n<p>Dialogun boyutunu veya ekran \u00fczerindeki konumunu de\u011fi\u015ftirmek isterseniz, <code>onStart()<\/code> metodunu kullanabilirsiniz. Bu metod, dialog penceresinin olu\u015fturuldu\u011fu ve g\u00f6sterilmeye haz\u0131r oldu\u011fu zamand\u0131r.<\/p>\n<pre><code class=\"language-java\">@Override\npublic void onStart() {\n    super.onStart();\n    Dialog dialog = getDialog();\n    if (dialog != null) {\n        int width = ViewGroup.LayoutParams.MATCH_PARENT; \/\/ Tam geni\u015flik\n        int height = ViewGroup.LayoutParams.WRAP_CONTENT; \/\/ \u0130\u00e7eri\u011fe g\u00f6re y\u00fckseklik\n        \/\/ int width = (int) (getResources().getDisplayMetrics().widthPixels * 0.85); \/\/ Ekran geni\u015fli\u011finin %85'i\n        \/\/ int height = (int) (getResources().getDisplayMetrics().heightPixels * 0.40); \/\/ Ekran y\u00fcksekli\u011finin %40'\u0131\n\n        dialog.getWindow().setLayout(width, height);\n        \/\/ dialog.getWindow().setGravity(Gravity.BOTTOM); \/\/ Dialogu alt k\u0131sma hizala\n    }\n}<\/code><\/pre>\n<h4>Arka Plan Etkile\u015fimini Y\u00f6netme<\/h4>\n<p>*   <strong><code>setCancelable(boolean)<\/code>:<\/strong> Kullan\u0131c\u0131n\u0131n geri tu\u015funa basarak veya dialogun d\u0131\u015f\u0131na dokunarak dialogu kapat\u0131p kapatamayaca\u011f\u0131n\u0131 belirler. Varsay\u0131lan olarak <code>true<\/code>&#8216;dur. <code>false<\/code> olarak ayarlan\u0131rsa, kullan\u0131c\u0131 sadece dialog i\u00e7indeki bir eylem (\u00f6rne\u011fin bir d\u00fc\u011fmeye basmak) ile dialogu kapatabilir.<\/p>\n<pre><code class=\"language-java\">\/\/ onCreateDialog veya onCreateView i\u00e7inde\n    setCancelable(false); \/\/ Kullan\u0131c\u0131n\u0131n dialogu iptal etmesini engeller<\/code><\/pre>\n<p>*   <strong><code>getDialog().setCanceledOnTouchOutside(boolean)<\/code>:<\/strong> Bu, <code>setCancelable(true)<\/code> oldu\u011funda dialogun d\u0131\u015f\u0131na dokunuldu\u011funda kapan\u0131p kapanmayaca\u011f\u0131n\u0131 kontrol eder. Genellikle <code>setCancelable()<\/code> ile birlikte kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-java\">\/\/ onStart i\u00e7inde veya onCreateDialog i\u00e7inde dialogu olu\u015fturduktan sonra\n    if (getDialog() != null) {\n        getDialog().setCanceledOnTouchOutside(false); \/\/ D\u0131\u015far\u0131 dokunuldu\u011funda kapanmas\u0131n\u0131 engeller\n    }<\/code><\/pre>\n<h4>Dialog Kapan\u0131\u015f\u0131n\u0131 Dinleme<\/h4>\n<p>*   <strong><code>onDismiss(DialogInterface dialog)<\/code>:<\/strong> Dialog herhangi bir \u015fekilde kapat\u0131ld\u0131\u011f\u0131nda (tamam d\u00fc\u011fmesi, iptal d\u00fc\u011fmesi, geri tu\u015fu, d\u0131\u015far\u0131ya dokunma) \u00e7a\u011fr\u0131l\u0131r.<br \/>\n*   <strong><code>onCancel(DialogInterface dialog)<\/code>:<\/strong> Dialog iptal edildi\u011finde (geri tu\u015fu veya d\u0131\u015far\u0131ya dokunma ile) \u00e7a\u011fr\u0131l\u0131r. Bu metod, <code>onDismiss()<\/code>&#8216;ten \u00f6nce \u00e7a\u011fr\u0131l\u0131r. E\u011fer dialogu <code>dismiss()<\/code> ile kendiniz kapat\u0131rsan\u0131z, <code>onCancel()<\/code> \u00e7a\u011fr\u0131lmaz.<\/p>\n<p>Bu metodlar\u0131 override ederek dialog kapat\u0131ld\u0131\u011f\u0131nda \u00f6zel i\u015flemler yapabilirsiniz.<\/p>\n<pre><code class=\"language-java\">@Override\npublic void onDismiss(@NonNull DialogInterface dialog) {\n    super.onDismiss(dialog);\n    \/\/ Dialog kapat\u0131ld\u0131\u011f\u0131nda yap\u0131lacak i\u015flemler\n    \/\/ \u00d6rne\u011fin, host Activity'ye bildirim g\u00f6nderebiliriz.\n}\n\n@Override\npublic void onCancel(@NonNull DialogInterface dialog) {\n    super.onCancel(dialog);\n    \/\/ Dialog iptal edildi\u011finde yap\u0131lacak i\u015flemler (dismiss'ten \u00f6nce)\n}<\/code><\/pre>\n<h4>Ekran D\u00f6nd\u00fcrme ve Durum Y\u00f6netimi<\/h4>\n<p><code>DialogFragment<\/code>, bir <code>Fragment<\/code> oldu\u011fu i\u00e7in yap\u0131land\u0131rma de\u011fi\u015fikliklerini (ekran d\u00f6nd\u00fcrme gibi) otomatik olarak ele al\u0131r. <code>FragmentManager<\/code>, Activity yeniden olu\u015fturuldu\u011funda <code>DialogFragment<\/code>&#8216;\u0131 da yeniden olu\u015fturur ve <code>Bundle<\/code> arac\u0131l\u0131\u011f\u0131yla durumunu geri y\u00fckler. Bu nedenle, <code>DialogFragment<\/code> i\u00e7inde \u00f6zel bir durum kaydetme\/geri y\u00fckleme mant\u0131\u011f\u0131na genellikle gerek yoktur, arg\u00fcmanlar i\u00e7in <code>newInstance<\/code> ve <code>Bundle<\/code> kullan\u0131m\u0131 yeterlidir.<\/p>\n<h4>Stil ve Tema Uygulama<\/h4>\n<p><code>DialogFragment<\/code>&#8216;a \u00f6zel bir stil veya tema uygulamak i\u00e7in <code>setStyle()<\/code> metodunu kullanabilirsiniz. Bu, dialogun g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc (\u00f6rne\u011fin arka plan\u0131, ba\u015fl\u0131k \u00e7ubu\u011fu) tamamen \u00f6zelle\u015ftirmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-java\">\/\/ onCreateDialog veya onCreateView'den \u00f6nce \u00e7a\u011fr\u0131l\u0131r\n@Override\npublic void onCreate(@Nullable Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    \/\/ Dialog'a \u00f6zel bir tema uygula\n    \/\/ STYLE_NO_TITLE, STYLE_NORMAL, STYLE_NO_FRAME gibi sabitler kullan\u0131labilir.\n    \/\/ \u0130kinci parametre tema kayna\u011f\u0131d\u0131r (\u00f6rne\u011fin R.style.MyCustomDialogTheme).\n    setStyle(DialogFragment.STYLE_NORMAL, R.style.MyCustomDialogTheme);\n}<\/code><\/pre>\n<p><code>res\/values\/styles.xml<\/code> i\u00e7inde \u00f6zel bir tema tan\u0131mlayabilirsiniz:<\/p>\n<pre><code class=\"language-xml\"><style name=\"MyCustomDialogTheme\" parent=\"Theme.AppCompat.Light.Dialog.Alert\">\n    <item name=\"android:windowBackground\">@drawable\/dialog_background<\/item>\n    <item name=\"android:windowNoTitle\">true<\/item>\n    <item name=\"android:windowFullscreen\">false<\/item>\n    <item name=\"android:windowIsFloating\">true<\/item>\n    <item name=\"android:windowIsTranslucent\">true<\/item>\n<\/style><\/code><\/pre>\n<h4>Progress Dialog&#8217;lar<\/h4>\n<p>Bir i\u015flem devam ederken kullan\u0131c\u0131y\u0131 bekletmek i\u00e7in ilerleme (progress) dialoglar\u0131 kullan\u0131l\u0131r. <code>DialogFragment<\/code> ile kendi \u00f6zel ilerleme dialogunuzu olu\u015fturabilirsiniz.<\/p>\n<pre><code class=\"language-java\">import android.app.Dialog;\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ProgressBar;\nimport android.widget.TextView;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.fragment.app.DialogFragment;\n\npublic class ProgressDialogFragment extends DialogFragment {\n\n    public static ProgressDialogFragment newInstance(String message) {\n        ProgressDialogFragment fragment = new ProgressDialogFragment();\n        Bundle args = new Bundle();\n        args.putString(\"message\", message);\n        fragment.setArguments(args);\n        return fragment;\n    }\n\n    @Override\n    public void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        \/\/ Dialogu iptal edilemez yap\n        setCancelable(false); \n    }\n\n    @Nullable\n    @Override\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.dialog_progress_layout, container, false);\n        TextView messageTextView = view.findViewById(R.id.progress_message);\n        messageTextView.setText(getArguments().getString(\"message\", \"L\u00fctfen bekleyiniz...\"));\n\n        \/\/ Ba\u015fl\u0131\u011f\u0131 gizle\n        if (getDialog() != null && getDialog().getWindow() != null) {\n            getDialog().getWindow().requestFeature(STYLE_NO_TITLE);\n            getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent); \/\/ Arka plan\u0131 \u015feffaf yap\n        }\n\n        return view;\n    }\n}<\/code><\/pre>\n<p><code>dialog_progress_layout.xml<\/code>:<\/p>\n<pre><code class=\"language-xml\"><LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:padding=\"24dp\"\n    android:gravity=\"center\"\n    android:background=\"@drawable\/rounded_dialog_background\"> <!-- \u00d6zel arka plan -->\n\n    <ProgressBar\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"16dp\"\/>\n\n    <TextView\n        android:id=\"@+id\/progress_message\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"L\u00fctfen bekleyiniz...\"\n        android:textColor=\"@android:color\/black\"\n        android:textSize=\"16sp\"\/>\n\n<\/LinearLayout><\/code><\/pre>\n<p>Bu \u00f6rnek, <code>setCancelable(false)<\/code> ile kullan\u0131c\u0131n\u0131n dialogu kapatmas\u0131n\u0131 engelleyen ve \u00f6zel bir layout ile ilerleme g\u00f6steren bir dialog olu\u015fturur.<\/p>\n<h3>S\u0131k\u00e7a Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p><code>DialogFragment<\/code> kullan\u0131rken geli\u015ftiricilerin kar\u015f\u0131la\u015fabilece\u011fi baz\u0131 yayg\u0131n sorunlar ve bunlar\u0131n \u00e7\u00f6z\u00fcmleri \u015funlard\u0131r:<\/p>\n<h4>IllegalStateException: Can not perform this action after onSaveInstanceState<\/h4>\n<p>Bu hata, Activity&#8217;nin durumunu kaydettikten sonra (yani <code>onSaveInstanceState()<\/code> \u00e7a\u011fr\u0131ld\u0131ktan sonra) bir <code>FragmentTransaction<\/code> (dolay\u0131s\u0131yla <code>DialogFragment.show()<\/code>) ger\u00e7ekle\u015ftirmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda ortaya \u00e7\u0131kar. Activity arka plana ge\u00e7ti\u011finde veya ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn belirli bir noktas\u0131nda bu durum olu\u015fabilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n*   <strong>En iyi uygulama:<\/strong> <code>DialogFragment.show()<\/code> metodunu yaln\u0131zca Activity \u00f6n plandayken (yani <code>onResume()<\/code> ile <code>onPause()<\/code> aras\u0131nda) \u00e7a\u011f\u0131r\u0131n.<br \/>\n*   <strong>Alternatif (dikkatli kullan\u0131lmal\u0131):<\/strong> E\u011fer bu k\u0131s\u0131tlamay\u0131 a\u015fman\u0131z gerekiyorsa ve durum kayb\u0131n\u0131 g\u00f6ze alabiliyorsan\u0131z, <code>showAllowingStateLoss()<\/code> metodunu kullanabilirsiniz. Ancak bu, kullan\u0131c\u0131 geri tu\u015funa bast\u0131\u011f\u0131nda veya yap\u0131land\u0131rma de\u011fi\u015fti\u011finde dialogun kaybolmas\u0131na neden olabilir. Bu y\u00f6ntem, uygulaman\u0131z\u0131n tutarl\u0131 bir durumunu garanti etmedi\u011fi i\u00e7in genellikle ka\u00e7\u0131n\u0131lmal\u0131d\u0131r.<\/p>\n<h4>Dialog&#8217;un Kapanmamas\u0131<\/h4>\n<p>Bir <code>DialogFragment<\/code>&#8216;\u0131n kapanmamas\u0131n\u0131n birka\u00e7 nedeni olabilir:<\/p>\n<p>*   <strong><code>dismiss()<\/code> \u00e7a\u011fr\u0131s\u0131n\u0131n unutulmas\u0131:<\/strong> Dialog i\u00e7indeki bir d\u00fc\u011fmeye t\u0131kland\u0131\u011f\u0131nda veya bir i\u015flem tamamland\u0131\u011f\u0131nda <code>dismiss()<\/code> metodunu \u00e7a\u011f\u0131rmay\u0131 unutmu\u015f olabilirsiniz.<br \/>\n*   <strong><code>setCancelable(false)<\/code>:<\/strong> Dialogun iptal edilemez olarak ayarlanmas\u0131, geri tu\u015fu veya d\u0131\u015far\u0131 dokunma ile kapanmas\u0131n\u0131 engeller. E\u011fer dialogun kapanmas\u0131 gerekiyorsa, bu ayar\u0131 kontrol edin.<br \/>\n*   <strong><code>getDialog().setCanceledOnTouchOutside(false)<\/code>:<\/strong> Bu ayar da dialogun d\u0131\u015f\u0131na dokunuldu\u011funda kapanmas\u0131n\u0131 engeller.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n*   \u0130lgili olay i\u015fleyicilerinde <code>dismiss()<\/code> metodunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n*   <code>setCancelable()<\/code> ve <code>setCanceledOnTouchOutside()<\/code> ayarlar\u0131n\u0131 g\u00f6zden ge\u00e7irin.<\/p>\n<h4>Veri Kayb\u0131<\/h4>\n<p>Ekran d\u00f6nd\u00fcrme veya ba\u015fka bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011fi sonras\u0131nda <code>DialogFragment<\/code>&#8216;\u0131n i\u00e7indeki verilerin kaybolmas\u0131 s\u0131k kar\u015f\u0131la\u015f\u0131lan bir durumdur.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n*   <strong>Arg\u00fcmanlar i\u00e7in <code>Bundle<\/code>:<\/strong> <code>DialogFragment<\/code>&#8216;a veri g\u00f6ndermek i\u00e7in her zaman <code>newInstance()<\/code> ve <code>setArguments()<\/code> kullanarak bir <code>Bundle<\/code> kullan\u0131n. <code>onCreateDialog()<\/code> veya <code>onCreateView()<\/code> i\u00e7inde <code>getArguments()<\/code> ile bu verilere eri\u015fin.<br \/>\n*   <strong>Durum y\u00f6netimi i\u00e7in <code>ViewModel<\/code>:<\/strong> Daha karma\u015f\u0131k durumlar veya kullan\u0131c\u0131 taraf\u0131ndan girilen veriler i\u00e7in, <code>ViewModel<\/code> kullanarak verileri Activity ya\u015fam d\u00f6ng\u00fcs\u00fcnden ba\u011f\u0131ms\u0131z olarak saklay\u0131n.<\/p>\n<h4>Bellek S\u0131z\u0131nt\u0131lar\u0131 (Memory Leaks)<\/h4>\n<p><code>DialogFragment<\/code> i\u00e7inde yanl\u0131\u015f referans y\u00f6netimi, bellek s\u0131z\u0131nt\u0131lar\u0131na yol a\u00e7abilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n*   <strong>Context referanslar\u0131:<\/strong> Activity veya Fragment context&#8217;ine (\u00f6rne\u011fin <code>requireActivity()<\/code>) uzun s\u00fcreli referanslar tutmaktan ka\u00e7\u0131n\u0131n. E\u011fer bir listener kullan\u0131yorsan\u0131z, <code>onDetach()<\/code> metodunda listener referans\u0131n\u0131 <code>null<\/code> olarak ayarlay\u0131n.<br \/>\n*   <strong>Statik referanslar:<\/strong> <code>DialogFragment<\/code> i\u00e7inde statik olarak Activity veya View referanslar\u0131 tutmaktan ka\u00e7\u0131n\u0131n. Bu, Activity yok edildi\u011finde bile bellekte kalmas\u0131na neden olabilir.<br \/>\n*   <strong>G\u00f6r\u00fcn\u00fcm referanslar\u0131:<\/strong> <code>onCreateView()<\/code> i\u00e7inde elde etti\u011finiz View referanslar\u0131n\u0131 <code>onDestroyView()<\/code> i\u00e7inde <code>null<\/code> olarak ayarlamak, s\u0131z\u0131nt\u0131lar\u0131 \u00f6nlemeye yard\u0131mc\u0131 olabilir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p><code>DialogFragment<\/code>, Android uygulamalar\u0131nda dialog pencereleri olu\u015fturmak i\u00e7in modern, sa\u011flam ve \u00f6nerilen bir yakla\u015f\u0131md\u0131r. Fragment mimarisinin getirdi\u011fi ya\u015fam d\u00f6ng\u00fcs\u00fc y\u00f6netimi, yap\u0131land\u0131rma de\u011fi\u015fikliklerine diren\u00e7 ve mod\u00fclerlik gibi avantajlar sayesinde, <code>DialogFragment<\/code> geli\u015ftiricilerin daha g\u00fcvenilir ve bak\u0131m\u0131 kolay uygulamalar olu\u015fturmas\u0131na olanak tan\u0131r. Basit <code>AlertDialog<\/code>&#8216;lardan tamamen \u00f6zel layout&#8217;lara, tarih\/saat se\u00e7icilerden ilerleme dialoglar\u0131na kadar geni\u015f bir yelpazede kullan\u0131labilir.<\/p>\n<p>Bu makalede ele al\u0131nan temel ve geli\u015fmi\u015f kullan\u0131m teknikleri, veri ileti\u015fim y\u00f6ntemleri ve s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan sorunlara y\u00f6nelik \u00e7\u00f6z\u00fcmler, <code>DialogFragment<\/code>&#8216;\u0131 etkili bir \u015fekilde kullanman\u0131z i\u00e7in size kapsaml\u0131 bir rehber sunmaktad\u0131r. Aray\u00fczler ve <code>ViewModel<\/code> gibi modern ileti\u015fim y\u00f6ntemlerini benimseyerek, <code>DialogFragment<\/code>&#8216;\u0131 uygulaman\u0131z\u0131n kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 olarak kullanabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber\nAndroid uygulamalar\u0131nda kullan\u0131c\u0131 ile etkile\u015fim kurman\u0131n ve kritik bilgileri sunman\u0131n en ya","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35496","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber\" \/>\n<meta property=\"og:description\" content=\"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber Android uygulamalar\u0131nda kullan\u0131c\u0131 ile etkile\u015fim kurman\u0131n ve kritik bilgileri sunman\u0131n en ya\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-30T07:40:51+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber\",\"datePublished\":\"2025-11-30T07:40:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\"},\"wordCount\":2450,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\",\"name\":\"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-30T07:40:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber","og_description":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber Android uygulamalar\u0131nda kullan\u0131c\u0131 ile etkile\u015fim kurman\u0131n ve kritik bilgileri sunman\u0131n en ya","og_url":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-30T07:40:51+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber","datePublished":"2025-11-30T07:40:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/"},"wordCount":2450,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/","name":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-30T07:40:51+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/android-dialogfragment-kapsamli-bir-teknik-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Android DialogFragment: Kapsaml\u0131 Bir Teknik Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35496"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35496\/revisions"}],"predecessor-version":[{"id":35497,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35496\/revisions\/35497"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}