Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制按钮点击次数_Java_Android_Button_Android Studio - Fatal编程技术网

Java 限制按钮点击次数

Java 限制按钮点击次数,java,android,button,android-studio,Java,Android,Button,Android Studio,我制作了一个应用程序,用户按下一个按钮进入另一个活动,但我只希望用户总共按下这个按钮5次。我尝试了下面的代码,但是它并没有阻止用户按下按钮超过5次,所以我猜应用程序需要以某种方式记住点击 public void FoodClicks(View view){ if(this.counter == 5){ this.counter ++; } else { Butt

我制作了一个应用程序,用户按下一个按钮进入另一个活动,但我只希望用户总共按下这个按钮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_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="38dp"
android:text="@string/addmeal" /> 

您必须将增加的数字分配给您的成员字段。而且评估也不正确

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 foodclick(视图){
如果(此计数器<5){
这个计数器+=1;
}否则{
按钮btn=(按钮)findViewById(R.id.Button);
btn.setEnabled(false);
}
}
再说一遍,观点的论点是什么?实际的按钮?然后你可以直接使用它

public void FoodClicks(View view){
        if(this.counter < 5){
            this.counter += 1;
        } else {
            ((Button) view).setEnabled(false);
        }
    }
public void foodclick(视图){
如果(此计数器<5){
这个计数器+=1;
}否则{
((按钮)视图).setEnabled(false);
}
}

您必须将增加的数字分配给您的成员字段。而且评估也不正确

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 foodclick(视图){
如果(此计数器<5){
这个计数器+=1;
}否则{
按钮btn=(按钮)findViewById(R.id.Button);
btn.setEnabled(false);
}
}
再说一遍,观点的论点是什么?实际的按钮?然后你可以直接使用它

public void FoodClicks(View view){
        if(this.counter < 5){
            this.counter += 1;
        } else {
            ((Button) view).setEnabled(false);
        }
    }
public void foodclick(视图){
如果(此计数器<5){
这个计数器+=1;
}否则{
((按钮)视图).setEnabled(false);
}
}

如果要调用方法,请将以下内容添加到xml中:

<Button
  ...
  android:onClick = "FoodClicks"
 /> 
此外,你还必须改变你的状况

this.counter == 5

this.counter<4

记住初始化这个。计数器=0;在
活动中

调用方法时,将以下内容添加到xml中:

<Button
  ...
  android:onClick = "FoodClicks"
 /> 
此外,你还必须改变你的状况

this.counter == 5

this.counter<4

记住初始化这个。计数器=0;在您的
活动上

由于您使用此按钮打开另一个活动,因此当您返回该活动时,它将导致您的活动重新加载…因此计数器将重新初始化
解决此问题的一种方法是将该计数器存储在存储区域中,如应用程序类,因为您可以使用此按钮打开另一个活动,以便在返回该活动时重新加载该活动…因此计数器将重新初始化
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();
    }
});
解决此问题的一种方法是将计数器存储在像应用程序类这样的存储区域中

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();
    }
});
使用
SharedReferences
存储点击次数,因此如果您的按钮执行任何操作,都可以存储点击次数



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

如何在按钮中使用食物点击(视图)?你能发布你的布局xml吗?你在片段或活动中在哪里使用这个方法?看看@KonradKrakowiak,请看上面按钮的xml。我正在活动中使用此方法。@NicolaBA让我们试试我的解决方案如何在按钮中使用FoodClicks(视图)?你能发布你的布局xml吗?你在片段或活动中在哪里使用这个方法?看看@KonradKrakowiak,请看上面按钮的xml。我在一个活动中使用这种方法。@NicolaBA让我们试试我的解决方案仔细阅读OP的问题。@Apurva但当他禁用按钮时,没有太多的可能更改任何计数器more@KonradKrakowiak因此,我将计数器设置为0='public int counter=0;'我已经将上面的代码添加到我的XML中。没有错误,但是当我在模拟器上运行和测试时,单击5次后,用户仍无法停止单击按钮。@NicolaBA您是否更改了条件?@NicolaBA检查我的答案。仔细阅读OP的问题。@Apurva但当他禁用按钮时,没有太多可能更改任何计数器more@KonradKrakowiak因此,我将计数器设置为0='public int counter=0;'我已经将上面的代码添加到我的XML中。没有错误,但当我在模拟器上运行和测试时,在单击5次之后,用户仍然无法停止单击按钮。@NicolaBA您是否更改了条件?@NicolaBA检查我的答案。我将代码更改为上面的您的代码,但是当我测试时,用户仍然可以单击按钮5次以上。我将代码更改为上面的您的代码,但是当我测试时,用户仍然可以点击按钮5次以上。我想可能是这样的。我该如何保存计数器?首先,您需要确保已按照所述扩展了应用程序类,然后将此计数器和该类放置为public static。我认为可能是这样。如何保存计数器?首先,您需要确保已按照描述扩展了应用程序类,然后将此计数器和该类放置为公共静态。如果按钮每次启动新活动,我怀疑这是否有效,因为每次计数器都会reset@Eenvincible哦,是的,按钮计数器需要存储在某个地方。@Apurva是的,我猜这就是为什么它不适合我。“你知道我该如何拯救柜台吗?”尼古拉巴,等等,我试试看something@Eenvincible看,我使用SharedReferences来存储点击次数如果按钮每次启动一个新的活动,我怀疑这会起作用,因为每次计数器都会启动reset@Eenvincible哦,是的,按钮计数器需要存储在某个地方。@Apurva是的,我猜这就是为什么它不适合我。“你知道我该如何拯救柜台吗?”尼古拉巴,等等,我试试看something@Eenvincible请看,我使用SharedReferences来存储点击次数