2015-03-02 120 views
1

我已经创建了一个应用程序,用户按下一个按钮导致其他活动,但我只希望用户总共按下此按钮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" /> 
+0

您如何在按钮中使用FoodClicks(View)?你可以发布你的布局xml吗? – 2015-03-02 15:16:27

+0

你在哪里使用这种方法在片段或活动? – 2015-03-02 15:17:33

+0

看看http://stackoverflow.com/questions/4022830/saving-state-between-activities/4022933#4022933 – Joel 2015-03-02 15:17:50

回答

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存储的点击数,因此,如果您的按钮执行任何操作,点击可以存储。

+0

如果按钮每次启动一个新的活动,我怀疑这将工作,因为每次计数器将重置 – Eenvincible 2015-03-02 16:00:44

+1

@Eenvincible哦,是的,按钮计数器需要存储在某个地方。 – Apurva 2015-03-02 16:02:25

+0

@Apurva是的,我猜这就是为什么它不适合我。任何想法我怎么去拯救柜台? – NicolaBA 2015-03-02 16:08:31

1

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

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); 
     } 
    } 
+0

我将代码更改为您的以上,但是当我测试用户仍然可以点击按钮超过5次。 – NicolaBA 2015-03-02 15:46:10

1

你新打电话给你的方法,添加到您的xml:

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

或实现您的ActivityonCreate方法侦听器,它会叫你的代码:

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

+0

仔细阅读OP的问题。 – Apurva 2015-03-02 15:36:49

+0

@Apurva谢谢你是对的 – 2015-03-02 15:37:46

+0

@Apurva但是当他禁用按钮没有多少可能性改变计数器 – 2015-03-02 15:40:40

1

因为你使用这个按钮来打开另一个活动,这样会导致你的活动,当你回来给它加载...所以计数器将重新初始化 来解决这个问题的方法之一是存储像你的应用程序类

+0

我认为可能是这样。我将如何去挽救柜台? – NicolaBA 2015-03-02 15:47:21

+0

首先,你需要确保你已经扩展了应用程序类,如[此处](http://stackoverflow.com/questions/12834379/extending-android-application-class) 所述,然后将此计数器该类作为公共静态 – 2015-03-02 15:52:07