我正在尝试学习简单的TransitionManager工作,但我有点卡住……
我的目标是通过图像点击在两个场景之间进行切换.但在第一次图像点击和第一次场景变换后,我无法捕捉图像点击…
这是我的片段代码:
- @Override
- public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_main,container,false);
- ViewGroup sceneRoot = (ViewGroup)rootView.findViewById(R.id.relative);
- final Transition transition = new ChangeBounds();
- transition.setDuration(3000);
- final Scene scene1 = Scene.getSceneForLayout(sceneRoot,R.layout.scene1,getActivity());
- final Scene scene2 = Scene.getSceneForLayout(sceneRoot,R.layout.scene2,getActivity());
- ImageView image = (ImageView)rootView.findViewById(R.id.image);
- image.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!testBoo){
- TransitionManager.go(scene2,transition);
- testBoo = true;
- } else {
- testBoo = false;
- TransitionManager.go(scene1,transition);
- }
- }
- });
- return rootView;
- }
片段xml:
- <RelativeLayout
- android:id="@+id/relative"
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- android:paddingBottom="@dimen/activity_vertical_margin"
- tools:showIn="@layout/activity_main"
- tools:context=".MainActivityFragment">
- <include
- layout="@layout/scene1"
- />
- </RelativeLayout>
scene1 xml:
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_margin="16dp"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <TextView
- android:id="@+id/text"
- android:text="Hello World!"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="30sp"
- android:layout_alignParentTop="true"
- android:layout_toRightOf="@id/image"
- android:layout_margin="5dp"
- />
- <ImageView
- android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@mipmap/ic_launcher"
- android:layout_alignParentTop="true"
- />
- </RelativeLayout>
scene2 xml:
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_margin="16dp"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <TextView
- android:id="@+id/text"
- android:text="Hello World!"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="30sp"
- android:layout_alignParentBottom="true"
- android:layout_toStartOf="@id/image"
- />
- <ImageView
- android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@mipmap/ic_launcher"
- android:layout_alignParentBottom="true"
- android:layout_alignParentRight="true"
- />
- </RelativeLayout>
你知道我哪里错了吗?
解决方法
您需要再次设置onClickListeners才能使其正常工作.
在onCreateView中,您可以直接调用setListeners方法.
- private void setListeners() {
- findViewById(R.id.thirdText).setOnClickListener(new View.OnClickListener() {
- @RequiresApi(api = Build.VERSION_CODES.KITKAT)
- @Override
- public void onClick(final View v) {
- final Scene scene3 = Scene.getSceneForLayout((ViewGroup) findViewById(R.id.mainlayout),R.layout.scene_3,MainActivity.this);
- Transition mFadeTransition = new ChangeBounds();
- TransitionManager.go(scene3,mFadeTransition);
- setListeners();
- }
- });
- findViewById(R.id.firsttext).setOnClickListener(new View.OnClickListener() {
- @RequiresApi(api = Build.VERSION_CODES.KITKAT)
- @Override
- public void onClick(final View v) {
- final Scene scene1 = Scene.getSceneForLayout((ViewGroup) findViewById(R.id.mainlayout),R.layout.activity_main,MainActivity.this);
- Transition mFadeTransition = new ChangeBounds();
- TransitionManager.go(scene1,mFadeTransition);
- setListeners();
- }
- });
- findViewById(R.id.secondText).setOnClickListener(new View.OnClickListener() {
- @RequiresApi(api = Build.VERSION_CODES.KITKAT)
- @Override
- public void onClick(final View v) {
- final Scene scene2 = Scene.getSceneForLayout((ViewGroup) findViewById(R.id.mainlayout),R.layout.scene_2,MainActivity.this);
- Transition mFadeTransition = new ChangeBounds();
- TransitionManager.go(scene2,mFadeTransition);
- setListeners();
- }
- });
- }