diff --git a/src/com/android/settings/wifi/AddWifiNetworkPreference.java b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
index e49f2ab..03a80a4 100644
--- a/src/com/android/settings/wifi/AddWifiNetworkPreference.java
+++ b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
@@ -36,7 +36,7 @@
 
     private static final String TAG = "AddWifiNetworkPreference";
 
-    private boolean mInitialized;
+    private final Drawable mScanIconDrawable;
 
     public AddWifiNetworkPreference(Context context) {
         super(context);
@@ -45,24 +45,22 @@
         setWidgetLayoutResource(R.layout.wifi_button_preference_widget);
         setIcon(R.drawable.ic_menu_add);
         setTitle(R.string.wifi_add_network);
+
+        mScanIconDrawable = getDrawable(R.drawable.ic_scan_24dp);
     }
 
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
 
-        if (!mInitialized) {
-            mInitialized = true;
-
-            final ImageButton imageButton = (ImageButton) holder.findViewById(R.id.button_icon);
-            imageButton.setImageDrawable(getDrawable(R.drawable.ic_scan_24dp));
-            imageButton.setContentDescription(
-                    getContext().getString(R.string.wifi_dpp_scan_qr_code));
-            imageButton.setOnClickListener(view -> {
-                getContext().startActivity(
-                    WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null));
-            });
-        }
+        final ImageButton scanButton = (ImageButton) holder.findViewById(R.id.button_icon);
+        scanButton.setImageDrawable(mScanIconDrawable);
+        scanButton.setContentDescription(
+                getContext().getString(R.string.wifi_dpp_scan_qr_code));
+        scanButton.setOnClickListener(view -> {
+            getContext().startActivity(
+                WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null));
+        });
     }
 
     private Drawable getDrawable(@DrawableRes int iconResId) {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java b/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java
index 7d4ebec..4343fcc 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java
@@ -37,9 +37,7 @@
 public class WifiTetherSsidPreference extends ValidatedEditTextPreference {
     private static final String TAG = "WifiTetherSsidPreference";
 
-    private ImageButton mImageButton;
-    private Drawable mButtonIcon;
-    private View mDivider;
+    private Drawable mShareIconDrawable;
     private View.OnClickListener mClickListener;
     private boolean mVisible;
 
@@ -72,30 +70,29 @@
         // TODO(b/129019971): use methods of divider line in parent object
         setLayoutResource(com.android.settingslib.R.layout.preference_two_target);
         setWidgetLayoutResource(R.layout.wifi_button_preference_widget);
+
+        mShareIconDrawable = getDrawable(R.drawable.ic_qrcode_24dp);
     }
 
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
 
-        if (mImageButton == null) {
-            mImageButton = (ImageButton) holder.findViewById(R.id.button_icon);
-
-            mImageButton.setContentDescription(
-                    getContext().getString(R.string.wifi_dpp_share_hotspot));
-            setButtonIcon(R.drawable.ic_qrcode_24dp);
-            mImageButton.setImageDrawable(mButtonIcon);
-
-            mDivider = holder.findViewById(R.id.two_target_divider);
-        }
+        final ImageButton shareButton = (ImageButton) holder.findViewById(R.id.button_icon);
+        final View dividerView = holder.findViewById(R.id.two_target_divider);
 
         if (mVisible) {
-            mImageButton.setOnClickListener(mClickListener);
-            mImageButton.setVisibility(View.VISIBLE);
-            mDivider.setVisibility(View.VISIBLE);
+            shareButton.setOnClickListener(mClickListener);
+            shareButton.setVisibility(View.VISIBLE);
+            shareButton.setContentDescription(
+                    getContext().getString(R.string.wifi_dpp_share_hotspot));
+            shareButton.setImageDrawable(mShareIconDrawable);
+
+            dividerView.setVisibility(View.VISIBLE);
         } else {
-            mImageButton.setVisibility(View.GONE);
-            mDivider.setVisibility(View.GONE);
+            shareButton.setVisibility(View.GONE);
+
+            dividerView.setVisibility(View.GONE);
         }
     }
 
@@ -107,12 +104,15 @@
         mVisible = visible;
     }
 
-    private void setButtonIcon(@DrawableRes int iconResId) {
+    private Drawable getDrawable(@DrawableRes int iconResId) {
+        Drawable buttonIcon = null;
+
         try {
-            mButtonIcon = getContext().getDrawable(iconResId);
+            buttonIcon = getContext().getDrawable(iconResId);
         } catch (Resources.NotFoundException exception) {
             Log.e(TAG, "Resource does not exist: " + iconResId);
         }
+        return buttonIcon;
     }
 
     @VisibleForTesting
