aboutsummaryrefslogtreecommitdiff
path: root/fragment
diff options
context:
space:
mode:
authorIan Lake <ilake@google.com>2018-11-29 16:29:32 -0800
committerIan Lake <ilake@google.com>2018-11-30 20:27:11 +0000
commit6ed4698615b86f06b2aca0cab4c827e85437254a (patch)
treec3cb9d0faead87a0a9b98cbd2098b5a2df971601 /fragment
parentf18c3b0446f3623ae4f56b7dbe0c47857495996e (diff)
downloadsupport-6ed4698615b86f06b2aca0cab4c827e85437254a.tar.gz
Add requireView() to Fragment
In cases where you know that the Fragment has a View, provide a requireView() method that returns a @NonNull View rather than requiring Kotlin users use fragment.view!! Test: new FragmentTest BUG: 120241368 Change-Id: I6ff3759ed6b6f4975d2d858e7592ad5bfc01042f
Diffstat (limited to 'fragment')
-rw-r--r--fragment/api/1.1.0-alpha03.txt1
-rw-r--r--fragment/api/current.txt1
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.java6
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.java16
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/FragmentReorderingTest.java2
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.java34
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.java6
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTests.java45
-rw-r--r--fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.java22
-rw-r--r--fragment/src/main/java/androidx/fragment/app/Fragment.java16
-rw-r--r--fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java2
-rw-r--r--fragment/src/main/java/androidx/fragment/app/FragmentTransition.java4
-rw-r--r--fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java3
-rw-r--r--fragment/src/main/java/androidx/fragment/app/ListFragment.java2
14 files changed, 105 insertions, 55 deletions
diff --git a/fragment/api/1.1.0-alpha03.txt b/fragment/api/1.1.0-alpha03.txt
index 0e4cde92755..dd5f2a0e6e2 100644
--- a/fragment/api/1.1.0-alpha03.txt
+++ b/fragment/api/1.1.0-alpha03.txt
@@ -115,6 +115,7 @@ package androidx.fragment.app {
method public final android.content.Context requireContext();
method public final androidx.fragment.app.FragmentManager requireFragmentManager();
method public final Object requireHost();
+ method public final android.view.View requireView();
method public void setAllowEnterTransitionOverlap(boolean);
method public void setAllowReturnTransitionOverlap(boolean);
method public void setArguments(android.os.Bundle?);
diff --git a/fragment/api/current.txt b/fragment/api/current.txt
index 0e4cde92755..dd5f2a0e6e2 100644
--- a/fragment/api/current.txt
+++ b/fragment/api/current.txt
@@ -115,6 +115,7 @@ package androidx.fragment.app {
method public final android.content.Context requireContext();
method public final androidx.fragment.app.FragmentManager requireFragmentManager();
method public final Object requireHost();
+ method public final android.view.View requireView();
method public void setAllowEnterTransitionOverlap(boolean);
method public void setAllowReturnTransitionOverlap(boolean);
method public void setArguments(android.os.Bundle?);
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.java
index 1f664033485..0f1f4cda6c8 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.java
@@ -450,7 +450,7 @@ public class FragmentAnimationTest {
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
- final View fragmentView = fragment1.getView();
+ final View fragmentView = fragment1.requireView();
final TranslateAnimation xAnimation = new TranslateAnimation(0, 1000, 0, 0);
mActivityRule.runOnUiThread(new Runnable() {
@@ -569,8 +569,8 @@ public class FragmentAnimationTest {
private void assertPostponed(AnimatorFragment fragment, int expectedAnimators)
throws InterruptedException {
assertTrue(fragment.mOnCreateViewCalled);
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
- assertEquals(0f, fragment.getView().getAlpha(), 0f);
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
+ assertEquals(0f, fragment.requireView().getAlpha(), 0f);
assertEquals(expectedAnimators, fragment.numAnimators);
}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.java
index ec1a2a7e678..4c08a34f077 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.java
@@ -126,7 +126,7 @@ public class FragmentAnimatorTest {
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
}
});
@@ -141,7 +141,7 @@ public class FragmentAnimatorTest {
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
}
});
@@ -150,7 +150,7 @@ public class FragmentAnimatorTest {
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
}
});
}
@@ -173,7 +173,7 @@ public class FragmentAnimatorTest {
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
}
});
@@ -189,7 +189,7 @@ public class FragmentAnimatorTest {
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
}
});
@@ -198,7 +198,7 @@ public class FragmentAnimatorTest {
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
}
});
}
@@ -547,8 +547,8 @@ public class FragmentAnimatorTest {
private void assertPostponed(AnimatorFragment fragment, int expectedAnimators)
throws InterruptedException {
assertTrue(fragment.mOnCreateViewCalled);
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
- assertEquals(0f, fragment.getView().getAlpha(), 0f);
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
+ assertEquals(0f, fragment.requireView().getAlpha(), 0f);
assertEquals(expectedAnimators, fragment.numAnimators);
}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentReorderingTest.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentReorderingTest.java
index b2890d57484..6516ae6da17 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentReorderingTest.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentReorderingTest.java
@@ -676,7 +676,7 @@ public class FragmentReorderingTest {
.setReorderingAllowed(true)
.commit();
mFM.executePendingTransactions();
- final View editText = fragment2.getView().findViewById(R.id.editText);
+ final View editText = fragment2.requireView().findViewById(R.id.editText);
assertTrue(editText.isFocused());
assertFalse(firstEditText.isFocused());
}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.java
index 7864152929b..a5076794f06 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.java
@@ -15,6 +15,8 @@
*/
package androidx.fragment.app;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
@@ -69,6 +71,31 @@ public class FragmentTest {
@SmallTest
@UiThreadTest
@Test
+ public void testRequireView() {
+ StrictViewFragment fragment1 = new StrictViewFragment();
+ mActivity.getSupportFragmentManager()
+ .beginTransaction()
+ .add(R.id.content, fragment1)
+ .commitNow();
+ assertThat(fragment1.requireView())
+ .isNotNull();
+ }
+
+ @SmallTest
+ @UiThreadTest
+ @Test(expected = IllegalStateException.class)
+ public void testRequireViewWithoutView() {
+ StrictFragment fragment1 = new StrictFragment();
+ mActivity.getSupportFragmentManager()
+ .beginTransaction()
+ .add(fragment1, "fragment")
+ .commitNow();
+ fragment1.requireView();
+ }
+
+ @SmallTest
+ @UiThreadTest
+ @Test
public void testOnCreateOrder() throws Throwable {
OrderFragment fragment1 = new OrderFragment();
OrderFragment fragment2 = new OrderFragment();
@@ -135,7 +162,7 @@ public class FragmentTest {
if (fragment.getView() == null) {
FragmentTestUtil.waitForExecution(mActivityRule);
}
- final View view = fragment.getView();
+ final View view = fragment.requireView();
final Animation animation = view.getAnimation();
if (animation == null || animation.hasEnded()) {
// animation has already completed
@@ -207,6 +234,11 @@ public class FragmentTest {
} catch (IllegalStateException expected) {
}
try {
+ fragment.requireView();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ try {
fragment.requireFragmentManager();
fail();
} catch (IllegalStateException expected) {
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.java
index b6c8562e15e..aab49d648c6 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.java
@@ -552,7 +552,7 @@ public class FragmentTransitionTest {
final View endGreen = findViewById(fragment2, R.id.greenSquare);
final View endBlue = findViewById(fragment2, R.id.blueSquare);
- assertEquals(View.GONE, fragment1.getView().getVisibility());
+ assertEquals(View.GONE, fragment1.requireView().getVisibility());
assertEquals(View.VISIBLE, startGreen.getVisibility());
assertEquals(View.VISIBLE, startBlue.getVisibility());
@@ -571,7 +571,7 @@ public class FragmentTransitionTest {
verifyAndClearTransition(fragment1.reenterTransition, null, startGreen, startBlue);
verifyNoOtherTransitions(fragment1);
- assertEquals(View.VISIBLE, fragment1.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment1.requireView().getVisibility());
assertEquals(View.VISIBLE, startGreen.getVisibility());
assertEquals(View.VISIBLE, startBlue.getVisibility());
@@ -856,7 +856,7 @@ public class FragmentTransitionTest {
}
private View findViewById(Fragment fragment, int id) {
- return fragment.getView().findViewById(id);
+ return fragment.requireView().findViewById(id);
}
private View findGreen() {
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTests.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTests.java
index 4547a4d798e..d958e3933b7 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTests.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTests.java
@@ -258,7 +258,7 @@ public class FragmentViewTests {
final Fragment replacement1 = fm.findFragmentByTag("1");
FragmentTestUtil.assertChildren(container, replacement1);
assertTrue(replacement1.isHidden());
- assertEquals(View.GONE, replacement1.getView().getVisibility());
+ assertEquals(View.GONE, replacement1.requireView().getVisibility());
}
// Removing a detached fragment should do nothing to the View and popping should bring
@@ -334,21 +334,21 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment);
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
fm.beginTransaction().hide(fragment).addToBackStack(null).commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment);
assertTrue(fragment.isHidden());
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment);
assertFalse(fragment.isHidden());
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
}
// Hiding a hidden fragment should not throw
@@ -391,21 +391,21 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertTrue(fragment.isHidden());
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
fm.beginTransaction().show(fragment).addToBackStack(null).commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment);
assertFalse(fragment.isHidden());
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment);
assertTrue(fragment.isHidden());
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
}
// Showing a shown fragment should not throw
@@ -447,7 +447,7 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertFalse(fragment.isDetached());
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
fm.beginTransaction().detach(fragment).addToBackStack(null).commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -460,7 +460,7 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertFalse(fragment.isDetached());
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
}
// Detaching a hidden fragment should remove the View from the hierarchy. Then popping it should
@@ -478,7 +478,7 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertFalse(fragment.isDetached());
assertTrue(fragment.isHidden());
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
fm.beginTransaction().detach(fragment).addToBackStack(null).commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -493,7 +493,7 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertTrue(fragment.isHidden());
assertFalse(fragment.isDetached());
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
}
// Detaching a detached fragment should not throw
@@ -542,7 +542,7 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertFalse(fragment.isDetached());
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -577,7 +577,7 @@ public class FragmentViewTests {
FragmentTestUtil.assertChildren(container, fragment);
assertTrue(fragment.isHidden());
assertFalse(fragment.isDetached());
- assertEquals(View.GONE, fragment.getView().getVisibility());
+ assertEquals(View.GONE, fragment.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -633,7 +633,7 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment2);
- assertEquals(View.VISIBLE, fragment2.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment2.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -644,7 +644,7 @@ public class FragmentViewTests {
assertFalse(replacement1.isHidden());
assertTrue(replacement1.isAdded());
assertFalse(replacement1.isDetached());
- assertEquals(View.VISIBLE, replacement1.getView().getVisibility());
+ assertEquals(View.VISIBLE, replacement1.requireView().getVisibility());
}
// Replace of multiple fragments in a container. Popping should replace it back again
@@ -673,7 +673,7 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment3);
- assertEquals(View.VISIBLE, fragment3.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment3.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -686,13 +686,13 @@ public class FragmentViewTests {
assertFalse(replacement1.isHidden());
assertTrue(replacement1.isAdded());
assertFalse(replacement1.isDetached());
- assertEquals(View.VISIBLE, replacement1.getView().getVisibility());
+ assertEquals(View.VISIBLE, replacement1.requireView().getVisibility());
// fragment2 was hidden, so it should be returned hidden
assertTrue(replacement2.isHidden());
assertTrue(replacement2.isAdded());
assertFalse(replacement2.isDetached());
- assertEquals(View.GONE, replacement2.getView().getVisibility());
+ assertEquals(View.GONE, replacement2.requireView().getVisibility());
}
// Replace of empty container. Should act as add and popping should just remove the fragment
@@ -711,7 +711,7 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment);
- assertEquals(View.VISIBLE, fragment.getView().getVisibility());
+ assertEquals(View.VISIBLE, fragment.requireView().getVisibility());
fm.popBackStack();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -845,7 +845,7 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment1);
- assertEquals(View.INVISIBLE, fragment1.getView().getVisibility());
+ assertEquals(View.INVISIBLE, fragment1.requireView().getVisibility());
final InvisibleFragment fragment2 = new InvisibleFragment();
fragment2.visibility = View.GONE;
@@ -856,7 +856,7 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment2);
- assertEquals(View.GONE, fragment2.getView().getVisibility());
+ assertEquals(View.GONE, fragment2.requireView().getVisibility());
}
// Test to ensure that popping and adding a fragment properly track the fragments added
@@ -951,8 +951,7 @@ public class FragmentViewTests {
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(container, fragment1);
- ViewGroup innerContainer = (ViewGroup)
- fragment1.getView().findViewById(R.id.fragmentContainer1);
+ ViewGroup innerContainer = fragment1.requireView().findViewById(R.id.fragmentContainer1);
Fragment fragment2 = fragment1.getChildFragmentManager().findFragmentByTag("inner");
FragmentTestUtil.assertChildren(innerContainer, fragment2);
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.java b/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.java
index 86e68e62fdf..1a52b437533 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.java
+++ b/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.java
@@ -367,8 +367,8 @@ public class PostponedTransitionTest {
clearTargets(fragment1);
clearTargets(fragment2);
- final View startBlue1 = fragment1.getView().findViewById(R.id.blueSquare);
- final View startBlue2 = fragment2.getView().findViewById(R.id.blueSquare);
+ final View startBlue1 = fragment1.requireView().findViewById(R.id.blueSquare);
+ final View startBlue2 = fragment2.requireView().findViewById(R.id.blueSquare);
final TransitionFragment fragment3 = new PostponedFragment2();
@@ -465,8 +465,8 @@ public class PostponedTransitionTest {
clearTargets(fragment1);
clearTargets(fragment2);
- final View startBlue1 = fragment1.getView().findViewById(R.id.blueSquare);
- final View startBlue2 = fragment2.getView().findViewById(R.id.blueSquare);
+ final View startBlue1 = fragment1.requireView().findViewById(R.id.blueSquare);
+ final View startBlue2 = fragment2.requireView().findViewById(R.id.blueSquare);
final TransitionFragment fragment3 = new PostponedFragment2();
@@ -563,8 +563,8 @@ public class PostponedTransitionTest {
clearTargets(fragment1);
clearTargets(fragment2);
- final View startBlue1 = fragment1.getView().findViewById(R.id.blueSquare);
- final View startBlue2 = fragment2.getView().findViewById(R.id.blueSquare);
+ final View startBlue1 = fragment1.requireView().findViewById(R.id.blueSquare);
+ final View startBlue2 = fragment2.requireView().findViewById(R.id.blueSquare);
final TransitionFragment fragment3 = new PostponedFragment2();
final StrictFragment strictFragment1 = new StrictFragment();
@@ -621,7 +621,7 @@ public class PostponedTransitionTest {
@Test
public void commitNowStartsPostponed() throws Throwable {
final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
- final View startBlue1 = mBeginningFragment.getView().findViewById(R.id.blueSquare);
+ final View startBlue1 = mBeginningFragment.requireView().findViewById(R.id.blueSquare);
final TransitionFragment fragment2 = new PostponedFragment2();
final TransitionFragment fragment1 = new PostponedFragment1();
@@ -634,7 +634,7 @@ public class PostponedTransitionTest {
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
- final View startBlue2 = fragment2.getView().findViewById(R.id.blueSquare);
+ final View startBlue2 = fragment2.requireView().findViewById(R.id.blueSquare);
mInstrumentation.runOnMainSync(new Runnable() {
@Override
@@ -709,7 +709,7 @@ public class PostponedTransitionTest {
@Test
public void popPostponedTransaction() throws Throwable {
final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
- final View startBlue = mBeginningFragment.getView().findViewById(R.id.blueSquare);
+ final View startBlue = mBeginningFragment.requireView().findViewById(R.id.blueSquare);
final TransitionFragment fragment = new PostponedFragment2();
@@ -892,7 +892,7 @@ public class PostponedTransitionTest {
assertEquals(0, start.sharedElementReturn.targets.size());
assertEquals(0, end.sharedElementReturn.targets.size());
- final View blue = end.getView().findViewById(R.id.blueSquare);
+ final View blue = end.requireView().findViewById(R.id.blueSquare);
assertTrue(end.sharedElementEnter.targets.contains(blue));
assertEquals("blueSquare", end.sharedElementEnter.targets.get(0).getTransitionName());
assertEquals("blueSquare", end.sharedElementEnter.targets.get(1).getTransitionName());
@@ -926,7 +926,7 @@ public class PostponedTransitionTest {
assertEquals(2, start.sharedElementReturn.targets.size());
assertEquals(0, end.sharedElementReturn.targets.size());
- final View blue = end.getView().findViewById(R.id.blueSquare);
+ final View blue = end.requireView().findViewById(R.id.blueSquare);
assertTrue(start.sharedElementReturn.targets.contains(blue));
assertEquals("blueSquare", start.sharedElementReturn.targets.get(0).getTransitionName());
assertEquals("blueSquare", start.sharedElementReturn.targets.get(1).getTransitionName());
diff --git a/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/src/main/java/androidx/fragment/app/Fragment.java
index 7e3c0f843dc..a9f08dfd3c9 100644
--- a/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -1597,6 +1597,22 @@ public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener
}
/**
+ * Get the root view for the fragment's layout (the one returned by {@link #onCreateView}).
+ *
+ * @throws IllegalStateException if no view was returned by {@link #onCreateView}.
+ * @see #getView()
+ */
+ @NonNull
+ public final View requireView() {
+ View view = getView();
+ if (view == null) {
+ throw new IllegalStateException("Fragment " + this + " did not return a View from"
+ + " onCreateView() or this was called before onCreateView().");
+ }
+ return view;
+ }
+
+ /**
* Called when the fragment's activity has been created and this
* fragment's view hierarchy instantiated. It can be used to do final
* initialization once these pieces are in place, such as retrieving
diff --git a/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java b/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
index b70f69776c6..acee49928ea 100644
--- a/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
+++ b/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
@@ -1890,7 +1890,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
for (int i = 0; i < numAdded; i++) {
final Fragment fragment = fragments.valueAt(i);
if (!fragment.mAdded) {
- final View view = fragment.getView();
+ final View view = fragment.requireView();
fragment.mPostponedAlpha = view.getAlpha();
view.setAlpha(0f);
}
diff --git a/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java b/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
index b8273a0471f..642058df2b6 100644
--- a/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
+++ b/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
@@ -561,7 +561,7 @@ class FragmentTransition {
final Fragment inFragment = fragments.lastIn;
final Fragment outFragment = fragments.firstOut;
if (inFragment != null) {
- inFragment.getView().setVisibility(View.VISIBLE);
+ inFragment.requireView().setVisibility(View.VISIBLE);
}
if (inFragment == null || outFragment == null) {
return null; // no shared element without a fragment
@@ -786,7 +786,7 @@ class FragmentTransition {
}
final Fragment outFragment = fragments.firstOut;
final ArrayMap<String, View> outSharedElements = new ArrayMap<>();
- impl.findNamedViews(outSharedElements, outFragment.getView());
+ impl.findNamedViews(outSharedElements, outFragment.requireView());
final SharedElementCallback sharedElementCallback;
final ArrayList<String> names;
diff --git a/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java b/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
index 33ba74ef363..7aeeab7066e 100644
--- a/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
+++ b/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
@@ -23,6 +23,7 @@ import android.graphics.Rect;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.core.view.OneShotPreDrawListener;
import androidx.core.view.ViewCompat;
@@ -211,7 +212,7 @@ public abstract class FragmentTransitionImpl {
* Finds all views that have transition names in the hierarchy under the given view and
* stores them in {@code namedViews} map with the name as the key.
*/
- void findNamedViews(Map<String, View> namedViews, View view) {
+ void findNamedViews(Map<String, View> namedViews, @NonNull View view) {
if (view.getVisibility() == View.VISIBLE) {
String transitionName = ViewCompat.getTransitionName(view);
if (transitionName != null) {
diff --git a/fragment/src/main/java/androidx/fragment/app/ListFragment.java b/fragment/src/main/java/androidx/fragment/app/ListFragment.java
index e1e087bd44b..adbcb677603 100644
--- a/fragment/src/main/java/androidx/fragment/app/ListFragment.java
+++ b/fragment/src/main/java/androidx/fragment/app/ListFragment.java
@@ -189,7 +189,7 @@ public class ListFragment extends Fragment {
if (!mListShown && !hadAdapter) {
// The list was hidden, and previously didn't have an
// adapter. It is now time to show it.
- setListShown(true, getView().getWindowToken() != null);
+ setListShown(true, requireView().getWindowToken() != null);
}
}
}