【问题标题】:onClick does not work after transition转换后 onClick 不起作用
【发布时间】:2015-10-16 07:53:16
【问题描述】:

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

场景1 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>

场景2 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>

你知道我哪里出错了吗?

【问题讨论】:

  • 找到任何答案了吗?
  • 现在呢?我有同样的问题(

标签: android onclick android-4.4-kitkat android-transitions


【解决方案1】:

您需要再次设置 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();
        }
    });
}

【讨论】:

    【解决方案2】:

    有趣的是(尽管几乎所有教程都一样),当我更改容器 ID 时,它开始起作用了。您也可以尝试相同的方法,看看它是否有效。

    【讨论】:

    • 哪些容器(什么容器)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多