首页 > 解决方案 > 当我更改片段中的页面时,我的 onClickListener 没有被调用

问题描述

在我的片段中,我有三个控件:两个ImageViews和一个Button

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
    android:id="@+id/rel_layout"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="#ffffffff"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:textStyle="bold"
        android:visibility="visible"
        android:textSize="25sp"
        android:layout_marginTop="10dp"
        android:layout_marginStart="10dp" />

    <ImageView
        android:id="@+id/forward"
        android:background="@drawable/chevronright"
        android:layout_below="@+id/heading"
        android:layout_alignParentEnd="true"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <ImageView
        android:id="@+id/back"
        android:background="@drawable/chevronleft"
        android:layout_below="@+id/heading"
        android:visibility="invisible"
        android:layout_alignParentStart="true"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <Button
        android:id="@+id/skip_button"
        android:text="@string/skip_button"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_below="@+id/back"
        android:layout_alignParentStart="true"
        android:textStyle="bold"
        android:layout_alignParentBottom="true"
        android:gravity="bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="10dp"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/heading" >

    <TextView
        android:id="@+id/body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="normal"
        android:visibility="visible"
        android:textSize="20sp" />

    </LinearLayout>
</RelativeLayout>

在片段中,我onClickListeners为所有三个控件定义:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    SharedPreferences sharedPref = getActivity().getSharedPreferences("WDWHIC settings", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putInt("lastPage", INTRO);
    editor.commit();

    View view = inflater.inflate(R.layout.fragment_intro, container, false);

    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(R.string.intro_page_full);

    RelativeLayout topLayout = getActivity().findViewById(R.id.topLayout);
    topLayout.setVisibility(View.INVISIBLE);

    final Animation in = new AlphaAnimation(0.0f, 1.0f);
    in.setDuration(500);

    RelativeLayout rel_layout = view.findViewById(R.id.rel_layout);

    Resources res = getResources();

    pages = res.getStringArray(R.array.pages_array);

    heading = rel_layout.findViewById(R.id.heading);
    heading.setText(pages[pageNum]);

    forward = rel_layout.findViewById(R.id.forward);
    forward.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            back.setVisibility(View.VISIBLE);
            pageNum += 2;
            heading.setText(pages[pageNum]);
            body.startAnimation(in);
            body.setText(pages[pageNum + 1]);
            body.scrollTo(0, 0);
            if (pageNum == 2 * MAX_PAGES) forward.setVisibility(View.INVISIBLE);
        }
    });

    back = rel_layout.findViewById(R.id.back);
    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            forward.setVisibility(View.VISIBLE);
            pageNum -= 2;
            heading.setText(pages[pageNum]);
            body.startAnimation(in);
            body.setText(pages[pageNum + 1]);
            body.scrollTo(0, 0);
            if (pageNum == 0) back.setVisibility(View.INVISIBLE);
        }
    });

    skip = rel_layout.findViewById(R.id.skip_button);
    skip.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditProfileFragment editProfileFragment = new EditProfileFragment();
            FragmentManager manager = getActivity().getSupportFragmentManager();
            manager.beginTransaction().replace(R.id.fragment_container, editProfileFragment, editProfileFragment.getTag()).commit();
            getActivity().overridePendingTransition(R.anim.fadein, R.anim.fadeout);
        }
    });

    body = rel_layout.findViewById(R.id.body);
    body.startAnimation(in);
    body.setText(pages[pageNum + 1]);
    body.setMovementMethod(new ScrollingMovementMethod());

    return view;
}

skip如果我在第一页上单击“ ”按钮,onClick则会调用其 () 方法。但是如果我单击前进或后退,除非我返回第一页,否则不会。这是怎么回事?为什么推进页面应该有所作为?

标签: androidandroid-fragmentsimageviewonclicklistenerbuttonclick

解决方案


尝试添加android:clickable="true"到您的图像视图。

在文档中:

android:clickable 定义这个视图是否响应点击事件。
https://developer.android.com/reference/android/view/View#attr_android:clickable

因此,理论上,如果 clickable 未设置为 true,则 View 的 onClickListener 不会被触发。


推荐阅读