2

I've been trying to show a PreferenceFragment inside of a dialogFragment but im not sure how...

I tried to put the preferencefragment in a layout

 <?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"> <fragment android:id="@+id/settings_fragment" android:name="com.example.test.Fragments.SettingsFragment" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

then using it in the onCreateView

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreate(savedInstanceState); val view = inflater!!.inflate(R.layout.dialog_preference, container, false) return view } 

On my main activity im calling it like this:

 override fun onClick(view: View) { val id = view.id when (id) { R.id.btnSettings -> { val dialog = SettingsDialog(); dialog.onCancel(object : DialogInterface { override fun cancel() { setTheme() } override fun dismiss() { } }) dialog.show(fragmentManager, null); } } } 

The first time i call it, it shows up but on the second try. It crashes.. Is there another way to show a PreferenceFragment in a dialog? Could someone please let me know how to do that? Thank you

This is the error message im getting

android.view.InflateException: Binary XML file line #5: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at com.example.test.Dialog.SettingsDialog.onCreateView(SettingsDialog.kt:20) at android.app.Fragment.performCreateView(Fragment.java:2053) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.app.BackStackRecord.run(BackStackRecord.java:834) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.IllegalArgumentException: Binary XML file line #5: Duplicate id 0x7f0e0080, tag null, or parent id 0xffffffff with another fragment for com.example.test.Fragments.SettingsFragment at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2120) at android.app.Activity.onCreateView(Activity.java:5328) at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:34) at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)  at android.view.LayoutInflater.inflate(LayoutInflater.java:504)  at android.view.LayoutInflater.inflate(LayoutInflater.java:414)  at com.example.test.Dialog.SettingsDialog.onCreateView(SettingsDialog.kt:20)  at android.app.Fragment.performCreateView(Fragment.java:2053)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)  at android.app.BackStackRecord.run(BackStackRecord.java:834)  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

0

1 Answer 1

3

I found the answer in another post: Duplicate ID, tag null, or parent id with another fragment for com.google.android.gms.maps.MapFragment

So when i added this to my onDestroyView

 override fun onDestroyView() { super.onDestroyView() val frag = fragmentManager.findFragmentById(R.id.settings_fragment) as SettingsFragment?; if (frag != null) fragmentManager.beginTransaction().remove(frag).commit(); } 

Everything works fine. If anyone can think of a better way to create a preference dialog please do let me know

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.