diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java
index 225ff8d..9f8e877 100644
--- a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java
+++ b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java
@@ -452,17 +452,38 @@
                 var pref = getDisplayPreference(context, display, groupCleanable);
                 pref.setSummary(display.getMode().getPhysicalWidth() + " x "
                                    + display.getMode().getPhysicalHeight());
-                pref.setTitle(display.getName());
             }
         }
     }
 
     private Preference getDisplayPreference(@NonNull Context context,
             @NonNull Display display, @NonNull PrefRefresh groupCleanable) {
-        var pref = groupCleanable.findUnusedPreference(DisplayPreference.generateKey(display));
-        pref = pref != null ? pref : new DisplayPreference(context, display);
-        groupCleanable.addPreference(pref);
-        return pref;
+        var itemKey = "display_id_" + display.getDisplayId();
+        var categoryKey = itemKey + "_category";
+        var category = (PreferenceCategory) groupCleanable.findUnusedPreference(categoryKey);
+
+        if (category != null) {
+            groupCleanable.addPreference(category);
+            return category.findPreference(itemKey);
+        } else {
+            category = new PreferenceCategory(context);
+            category.setPersistent(false);
+            category.setKey(categoryKey);
+            // Must add the category to the hierarchy before adding its descendants. Otherwise
+            // the category will not have a preference manager, which causes an exception when a
+            // child is added to it.
+            groupCleanable.addPreference(category);
+
+            var prefItem = new DisplayPreference(context, display);
+            prefItem.setTitle(context.getString(EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE)
+                    + " | " + context.getString(EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE));
+            prefItem.setKey(itemKey);
+
+            category.addPreference(prefItem);
+            category.setTitle(display.getName());
+
+            return prefItem;
+        }
     }
 
     private List<Display> externalDisplaysToShow(int displayIdToShow) {
@@ -621,16 +642,11 @@
             implements Preference.OnPreferenceClickListener {
         private final int mDisplayId;
 
-        static String generateKey(final Display display) {
-            return "display_id_" + display.getDisplayId();
-        }
-
         DisplayPreference(@NonNull final Context context, @NonNull final Display display) {
             super(context);
             mDisplayId = display.getDisplayId();
 
             setPersistent(false);
-            setKey(generateKey(display));
             setOnPreferenceClickListener(this);
         }
 
diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java
index 87af6b0..10ddd87 100644
--- a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java
+++ b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java
@@ -173,16 +173,18 @@
         mHandler.flush();
         PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY);
         assertThat(pref).isNotNull();
-        DisplayPreference display1Pref = (DisplayPreference) pref.getPreference(0);
-        DisplayPreference display2Pref = (DisplayPreference) pref.getPreference(1);
+        var display1Category = (PreferenceCategory) pref.getPreference(0);
+        var display1Pref = (DisplayPreference) display1Category.getPreference(0);
+        var display2Category = (PreferenceCategory) pref.getPreference(1);
+        var display2Pref = (DisplayPreference) display2Category.getPreference(0);
         assertThat(display1Pref.getKey()).isEqualTo("display_id_" + 1);
-        assertThat("" + display1Pref.getTitle()).isEqualTo("HDMI");
+        assertThat("" + display1Category.getTitle()).isEqualTo("HDMI");
         assertThat("" + display1Pref.getSummary()).isEqualTo("1920 x 1080");
         display1Pref.onPreferenceClick(display1Pref);
         assertThat(mDisplayIdArg).isEqualTo(1);
         verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Pref);
         assertThat(display2Pref.getKey()).isEqualTo("display_id_" + 2);
-        assertThat("" + display2Pref.getTitle()).isEqualTo("Overlay #1");
+        assertThat("" + display2Category.getTitle()).isEqualTo("Overlay #1");
         assertThat("" + display2Pref.getSummary()).isEqualTo("1240 x 780");
         display2Pref.onPreferenceClick(display2Pref);
         assertThat(mDisplayIdArg).isEqualTo(2);
