限制按钮点击次数

Posted

技术标签:

【中文标题】限制按钮点击次数【英文标题】:Limit number of button clicks 【发布时间】:2015-05-02 23:59:37 【问题描述】:

我制作了一个应用程序,用户按下一个按钮可以进入另一个活动,但我只希望用户总共按下这个按钮 5 次。我尝试了下面的代码,但是它不会阻止用户按下按钮超过 5 次,所以我猜应用程序需要以某种方式记住点击?

public void FoodClicks(View view)
            if(this.counter == 5)
                this.counter ++;
            
            else 
                Button btn = (Button)findViewById(R.id.button);
                btn.setEnabled(false);
            
        

ActivityMain.xml:

<Button
android:id="@+id/button"
style="?android:attr/buttonStyleSmall"
android:layout_
android:layout_
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="38dp"
android:text="@string/addmeal" /> 

【问题讨论】:

如何在按钮中使用 FoodClicks(View)?你能发布你的布局xml吗? 这个方法在fragment中或者Activity中用在什么地方? 看看***.com/questions/4022830/… @KonradKrakowiak 请参阅上方按钮的 XML。我在 Activity 中使用此方法。 @NicolaBA 让我们试试我的解决方案 【参考方案1】:
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View view) 

        int clicks = 0;
        clicks++;

        if (clicks >= 5)
            button.setEnabled(false);
        

        SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putInt("clicks", clicks);
        editor.apply();
    
);

使用sharedPreferences 存储点击次数,因此如果您的按钮执行任何操作,则可以存储点击次数。

【讨论】:

如果按钮每次都开始一个新的活动,我怀疑这会起作用,因为每次计数器都会重置 @Eenvincible 哦,是的,按钮计数器需要存储在某个地方。 @Apurva 是的,我猜这就是它对我不起作用的原因。知道如何保存计数器吗? @NicolaBA 等我试试 @Eenvincible 看到我使用 sharedPreferences 来存储点击次数【参考方案2】:

您必须将增加的数字分配给您的成员字段。评价也不对。

public void FoodClicks(View view)
        if(this.counter < 5)
            this.counter += 1;
         else 
            Button btn = (Button)findViewById(R.id.button);
            btn.setEnabled(false);
        
    

此外,视图参数是什么?实际的按钮?然后你可以直接使用它。

public void FoodClicks(View view)
        if(this.counter < 5)
            this.counter += 1;
         else 
            ((Button) view).setEnabled(false);
        
    

【讨论】:

我把上面的代码改成了你的,但是当我测试时,用户仍然可以点击按钮超过 5 次。【参考方案3】:

因为您使用此按钮打开另一个活动,所以当您返回它时会导致您的活动重新加载......所以计数器将被重新初始化 解决问题的一种方法是将该计数器存储在像您的应用程序类这样的保存区域中

【讨论】:

我认为可能是这样。我将如何保存计数器? 首先你需要确保你已经按照here 的描述扩展了应用程序类,然后你将这个计数器放置为公共静态类【参考方案4】:

您更新调用您的方法,将其添加到您的 xml:

<Button
  ...
  android:onClick = "FoodClicks"
 /> 

或在onCreate 方法侦听器中实现Activity,它将调用您的代码:

    Button btn = (Button)findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() 
         @Override
         public void onClick(View v) 
             FoodClicks(v);
         
     );

此外,您还必须从

更改您的条件
this.counter == 5

this.counter < 4

记得初始化 this.counter = 0;在你的Activity

【讨论】:

仔细阅读OP的问题。 @Apurva 但是当他禁用按钮时,就不可能再更改计数器了 @KonradKrakowiak 所以我将计数器设置为 0 = 'public int counter = 0;'我已将上面的代码添加到我的 XML 中。没有错误,但是当我在模拟器上运行和测试时,它仍然没有阻止用户在点击 5 次后点击按钮。 @NicolaBA 你改变条件了吗? @NicolaBA 检查我的答案。

以上是关于限制按钮点击次数的主要内容,如果未能解决你的问题,请参考以下文章

如何解除网页限制访问

防止恶意攻击短信验证码接口方法

如何计算未注册用户按下“搜索”的次数,然后将其保存在MySQL数据库中并为每个用户限制该数量?

a标签怎么限制下载次数

如何限制WORD文档的使用期限或打开次数呢?

WINDOS 远程桌面总被人暴力破解 如何限制登录次数