Browse Source

MainActivity: fix crash caused by fragment menus

Peter Cai 2 years ago
parent
commit
d66ed125fe
1 changed files with 20 additions and 13 deletions
  1. 20 13
      app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt

+ 20 - 13
app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt

@@ -57,21 +57,28 @@ open class MainActivity : AppCompatActivity() {
     override fun onCreateOptionsMenu(menu: Menu): Boolean {
     override fun onCreateOptionsMenu(menu: Menu): Boolean {
         menuInflater.inflate(R.menu.activity_main, menu)
         menuInflater.inflate(R.menu.activity_main, menu)
 
 
-        spinner = menu.findItem(R.id.spinner).actionView as Spinner
-        spinner.adapter = spinnerAdapter
-        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
-            override fun onItemSelected(
-                parent: AdapterView<*>?,
-                view: View?,
-                position: Int,
-                id: Long
-            ) {
-                supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments[position]).commit()
-            }
+        if (!this::spinner.isInitialized) {
+            spinner = menu.findItem(R.id.spinner).actionView as Spinner
+            spinner.adapter = spinnerAdapter
+            spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+                override fun onItemSelected(
+                    parent: AdapterView<*>?,
+                    view: View?,
+                    position: Int,
+                    id: Long
+                ) {
+                    supportFragmentManager.beginTransaction()
+                        .replace(R.id.fragment_root, fragments[position]).commit()
+                }
+
+                override fun onNothingSelected(parent: AdapterView<*>?) {
+                }
 
 
-            override fun onNothingSelected(parent: AdapterView<*>?) {
             }
             }
-
+        } else {
+            // Fragments may cause this menu to be inflated multiple times.
+            // Simply reuse the action view in that case
+            menu.findItem(R.id.spinner).actionView = spinner
         }
         }
 
 
         return true
         return true