Fixed
Status Update
Comments
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #2
Hi, thanks for reporting, we'll have a look. If you could provide us with a minimum sample app to reproduce the issue, that'd be very helpful.
ap...@google.com <ap...@google.com> #3
I confirm I managed to reproduce with API 23 emulator and the following patch on the sample app. Will investigate further.
Patch below.
***
Index: app/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- app/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt (revision 38ea42c142729c777dcf8f3e4bd5100aeca981ec)
+++ app/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt (date 1565281963000)
@@ -16,9 +16,11 @@
package androidx.viewpager2.integration.testapp.cards
+import android.text.SpannableStringBuilder
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.EditText
import android.widget.TextView
import androidx.annotation.ColorRes
@@ -28,7 +30,7 @@
/** Inflates and populates a [View] representing a [Card] */
class CardView(layoutInflater: LayoutInflater, container: ViewGroup?) {
val view: View = layoutInflater.inflate(R.layout.item_card_layout, container, false)
- private val textSuite: TextView
+ private val textSuite: EditText
private val textCorner1: TextView
private val textCorner2: TextView
@@ -42,7 +44,7 @@
* Updates the view to represent the passed in card
*/
fun bind(card: Card) {
- textSuite.text = card.suit
+ textSuite.text = SpannableStringBuilder(card.suit)
view.setBackgroundResource(getColorRes(card))
val cornerLabel = card.cornerLabel
Index: app/src/main/res/layout/item_card_layout.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- app/src/main/res/layout/item_card_layout.xml (revision 38ea42c142729c777dcf8f3e4bd5100aeca981ec)
+++ app/src/main/res/layout/item_card_layout.xml (date 1565281963000)
@@ -31,13 +31,15 @@
android:textAppearance="@android:style/TextAppearance.Large"
tools:text="A"/>
- <TextView
+ <EditText
android:id="@+id/label_center"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:inputType="text"
+ android:maxLines="1"
android:textAppearance="@android:style/TextAppearance.Large"
- tools:text="â™ "/>
+ tools:text="â™ " />
<TextView
android:id="@+id/label_bottom"
Patch below.
***
Index: app/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- app/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt (revision 38ea42c142729c777dcf8f3e4bd5100aeca981ec)
+++ app/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt (date 1565281963000)
@@ -16,9 +16,11 @@
package androidx.viewpager2.integration.testapp.cards
+import android.text.SpannableStringBuilder
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.EditText
import android.widget.TextView
import androidx.annotation.ColorRes
@@ -28,7 +30,7 @@
/** Inflates and populates a [View] representing a [Card] */
class CardView(layoutInflater: LayoutInflater, container: ViewGroup?) {
val view: View = layoutInflater.inflate(R.layout.item_card_layout, container, false)
- private val textSuite: TextView
+ private val textSuite: EditText
private val textCorner1: TextView
private val textCorner2: TextView
@@ -42,7 +44,7 @@
* Updates the view to represent the passed in card
*/
fun bind(card: Card) {
- textSuite.text = card.suit
+ textSuite.text = SpannableStringBuilder(card.suit)
view.setBackgroundResource(getColorRes(card))
val cornerLabel = card.cornerLabel
Index: app/src/main/res/layout/item_card_layout.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- app/src/main/res/layout/item_card_layout.xml (revision 38ea42c142729c777dcf8f3e4bd5100aeca981ec)
+++ app/src/main/res/layout/item_card_layout.xml (date 1565281963000)
@@ -31,13 +31,15 @@
android:textAppearance="@android:style/TextAppearance.Large"
tools:text="A"/>
- <TextView
+ <EditText
android:id="@+id/label_center"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:inputType="text"
+ android:maxLines="1"
android:textAppearance="@android:style/TextAppearance.Large"
- tools:text="â™ "/>
+ tools:text="â™ " />
<TextView
android:id="@+id/label_bottom"
Description
Component used: Lifecycle
Version used: 2.5.0-alpha01
Currently the call to
enableSavedStateHandles()
creates aViewModel
using theViewModelStore
. This requires that the ViewModelStore be set on any component attempting to make the call, but there are scenarios where the call toenableSavedStateHandles
needs to happen before that in particular in the Fragment and Navigation components where the call is not immediately made when the object is constructed or sometimes not at all.If we remove the reliance on
SavedStateHandles
(and therefore view models), we can lean into theSavedStateProvider
APIs and the call toenableSavedStateHandles()
can be made before theViewModelStore
is set.