我正在尝试学习简单的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(); } }); }