diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index c1365dd..435c3e9 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -47,6 +47,7 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.EditText;
 import android.widget.Toast;
 
@@ -199,7 +200,10 @@
     }
 
     @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        final View root = super.onCreateView(inflater, container, savedInstanceState);
+
         final Activity activity = getActivity();
         if (mWifiP2pManager == null) {
             mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
@@ -332,8 +336,7 @@
                 }
             }
         };
-
-        super.onActivityCreated(savedInstanceState);
+        return root;
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
index 796cdef..78e696d 100644
--- a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
@@ -39,7 +39,7 @@
 import android.net.wifi.p2p.WifiP2pManager;
 import android.os.Bundle;
 import android.view.MenuItem;
-
+import android.view.LayoutInflater;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
@@ -110,30 +110,30 @@
     }
 
     @Test
-    public void onActivityCreate_withNullBundle_canNotGetValue() {
-        mFragment.onActivityCreated(null);
+    public void onCreateView_withNullBundle_canNotGetValue() {
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, null);
 
         assertThat(mFragment.mSelectedWifiPeer).isNull();
     }
 
     @Test
-    public void onActivityCreate_withDeviceName_shouldGetDeviceName() {
+    public void onCreateView_withDeviceName_shouldGetDeviceName() {
         final String fakeDeviceName = "fakename";
         final Bundle bundle = new Bundle();
         bundle.putString(WifiP2pSettings.SAVE_DEVICE_NAME, fakeDeviceName);
 
-        mFragment.onActivityCreated(bundle);
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, bundle);
 
         assertThat(mFragment.mSavedDeviceName).isEqualTo(fakeDeviceName);
     }
 
     @Test
-    public void onActivityCreate_withGroupName_shouldGetGroupName() {
+    public void onCreateView_withGroupName_shouldGetGroupName() {
         final String fakeGroupName = "fakegroup";
         final Bundle bundle = new Bundle();
         bundle.putString(WifiP2pSettings.SAVE_SELECTED_GROUP, fakeGroupName);
 
-        mFragment.onActivityCreated(bundle);
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, bundle);
 
         assertThat(mFragment.mSelectedGroupName).isEqualTo(fakeGroupName);
         assertThat(mFragment.mSavedDeviceName).isNull();
@@ -279,7 +279,7 @@
         final String fakeDeviceName = "fakeName";
         final Bundle bundle = new Bundle();
         bundle.putString(WifiP2pSettings.SAVE_DEVICE_NAME, fakeDeviceName);
-        mFragment.onActivityCreated(bundle);
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, bundle);
         final Dialog dialog = mFragment.onCreateDialog(WifiP2pSettings.DIALOG_RENAME);
 
         mFragment.mRenameListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
@@ -292,7 +292,8 @@
         final String fakeDeviceName = "wrongName***";
         final Bundle bundle = new Bundle();
         bundle.putString(WifiP2pSettings.SAVE_DEVICE_NAME, fakeDeviceName);
-        mFragment.onActivityCreated(bundle);
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, bundle);
+
         final Dialog dialog = mFragment.onCreateDialog(WifiP2pSettings.DIALOG_RENAME);
 
         mFragment.mRenameListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
@@ -394,7 +395,7 @@
         final String fakeDeviceName = "fakeName";
         final Bundle createBundle = new Bundle();
         createBundle.putString(WifiP2pSettings.SAVE_DEVICE_NAME, fakeDeviceName);
-        mFragment.onActivityCreated(createBundle);
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, createBundle);
         final Bundle outBundle = new Bundle();
         final Dialog dialog = mFragment.onCreateDialog(WifiP2pSettings.DIALOG_RENAME);
 
@@ -430,7 +431,7 @@
         doReturn(groupList).when(wifiP2pGroupList).getGroupList();
         final Bundle bundle = new Bundle();
         bundle.putString(WifiP2pSettings.SAVE_SELECTED_GROUP, fakeGroupName);
-        mFragment.onActivityCreated(bundle);
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, bundle);
 
         mFragment.onPersistentGroupInfoAvailable(wifiP2pGroupList);
 
@@ -503,20 +504,20 @@
     }
 
     @Test
-    public void onActivityCreate_withNullP2pManager_shouldGetP2pManagerAgain() {
-        mFragment.mChannel = null; // Reset channel to re-test onActivityCreated flow
+    public void onCreateView_withNullP2pManager_shouldGetP2pManagerAgain() {
+        mFragment.mChannel = null; // Reset channel to re-test onCreateView flow
         mFragment.mWifiP2pManager = null;
 
-        mFragment.onActivityCreated(new Bundle());
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, new Bundle());
 
         assertThat(mFragment.mWifiP2pManager).isNotNull();
     }
 
     @Test
-    public void onActivityCreate_withNullChannel_shouldSetP2pManagerNull() {
+    public void onCreateView_withNullChannel_shouldSetP2pManagerNull() {
         doReturn(null).when(mWifiP2pManager).initialize(any(), any(), any());
-        mFragment.mChannel = null; // Reset channel to re-test onActivityCreated flow
-        mFragment.onActivityCreated(new Bundle());
+        mFragment.mChannel = null; // Reset channel to re-test onCreateView flow
+        mFragment.onCreateView(LayoutInflater.from(mContext), null, new Bundle());
 
         assertThat(mFragment.mWifiP2pManager).isNull();
     }
