簡體   English   中英

OnClickListener僅執行一次

[英]OnClickListener to be executed only once

在圖像上,我想設置一個單擊偵聽器,以便在單擊后執行操作。

即使單擊一下,下面的代碼也被多次調用。

我該如何預防? (我使用過一個onTouchListener,但結果是相同的...)

   Image1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Log.d("DisplayImage", "on click");
            DisplayOneImage doi=new DisplayOneImage(DisplayImage.this,"Filtered image 1");
            doi.show();
        }
    });

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"

>

<LinearLayout

    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    >

    <!-- \/ \/ \/ \/ To be deleted Menu \/ \/ \/ \/ -->
    <!--include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" /-->
    <!-- /\ /\ /\ /\ To be deleted Menu /\ /\ /\ /\  -->

    <LinearLayout
        android:id="@+id/img_original"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="10dp"
        android:layout_weight="1">


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Original Image:" />

        <ImageView
            android:id="@+id/initial_photo"

            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        </ImageView>

    </LinearLayout>
</ScrollView>

我將onClick方法內的OnClickListener設置為null ,如下所示。

  Image1.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        Log.d("DisplayImage", "on click");
        DisplayOneImage doi=new DisplayOneImage(DisplayImage.this,"Filtered image 1");
        doi.show();
        v.setOnClickListener(null);//Remove setOnClickListener
    }
});

如果有人想要一個只能每秒(1000毫秒)被單擊的onClickListener

private boolean clicked = false;

element.setOnClickListener(v -> {
    if(!clicked){
        clicked = true;
        doSomething(v.getSomething());
        new Handler().postDelayed(() -> clicked = false, 1000);
    }
});

當然,您可以將1000更改為您希望看到的任何毫秒數。

另一個更具侵入性的選擇

   Image1.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        Log.d("DisplayImage", "on click");
        DisplayOneImage doi=new DisplayOneImage(DisplayImage.this,"Filtered image 1");

        doi.show();
        Image1.setVisibility(View.GONE);
    }
});

用這個:

 Image1.setOnClickListener(new View.OnClickListener() {
            boolean clicked = false;
            public void onClick(View v) {
                if (!clicked) {
                    Log.d("DisplayImage", "on click");
                    DisplayOneImage doi=new DisplayOneImage(DisplayImage.this,"Filtered image 1");
                    doi.show();
                    clicked = true;
                }
            }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM