【问题标题】:Finding the time since the last time you pressed a button in Android Studio查找自上次在 Android Studio 中按下按钮以来的时间
【发布时间】:2015-12-25 01:05:16
【问题描述】:

我对 Java 和 Android Studio 还很陌生,所以请原谅我放出的任何笨拙。现在我有一个按钮,我想知道你最后一次按下该按钮的时间,当你最终再次按下它时,或者如果这是你第一次按下该按钮自启动以来的时间。我知道如何做大部分事情,只是我无法找到一种方法来存储您按下按钮以供将来使用的确切时间。

public class FightScreen extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fight_screen);

    final Button fightButton = (Button) findViewById(R.id.fightButton);
    final TextView timeText = (TextView) findViewById(R.id.timeText);
    final long bootTime = SystemClock.elapsedRealtime();

    fightButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Long timeElapsed = SystemClock.elapsedRealtime() - bootTime;
            timeText.setText(String.valueOf(timeElapsed));
        }
    });
}
}

我遗漏了一些与我的问题完全无关的内容。 此代码块查找从您启动 Activity 到您按下按钮的时间。我只是想知道如何将 onClick 函数中的变量返回到我未来的迭代中。像创建一个全局变量 lastButtonPressTime 并在适用时使用它代替 bootTime,这样这个代码块就可以完成我真正想要的。

编辑:这不是其他帖子的重复,因为我没有尝试使用 Timer 类。我想通过发现时间差异来弄清楚如何做到这一点。

【问题讨论】:

标签: java android scope


【解决方案1】:
public class FightScreen extends AppCompatActivity implements View.OnClickListener {  
   long lastClickTime = 0;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_fight_screen);

      final Button fightButton = (Button) findViewById(R.id.fightButton);
      final TextView timeText = (TextView) findViewById(R.id.timeText);
      final long bootTime = SystemClock.elapsedRealtime();
      lastClickTime = bootTime;
      fightButton.setOnClickListener(this);// the listener is this class now


    @Override
    public void onClick(View v) {   
        Long timeNow = SystemClock.elapsedRealtime();
        Long timeElapsed = SystemClock.elapsedRealtime() - lastClickTime;   
        lastClickTime = timeNow;
        timeText.setText(String.valueOf(timeElapsed));
    }



}

实现View.OnClickListener并覆盖onClick()方法如上图,它基本上是一种不同的事件处理方式。如果有多个View,那么在onClick()你可以通过v.getId()查看view id根据发送视图确定如何处理点击

【讨论】:

  • 我不能这样做,因为为了让我能够在内部类中使用 lastClickTime,我需要将其设为 final。这反过来又限制了我在所述内部类中修改它。
  • 我似乎无法让它工作,我完整的、未删节的代码是这样的:pastebin.com/t4yrjS9X。它没有任何错误,只是在我进入活动时崩溃。 “尝试在空对象引用上调用虚拟方法。”
  • 链接到您的代码不起作用,但很可能您的按钮未初始化。你确定fightButton在(R.layout.activity_fight_screen)??!
  • 奇怪,这个链接对我有用。请改用pastebin.com/t4yrjS9X。是的,fightButton 在活动中。问题可能出在我的实际代码中,在这里我重新上传了它:pastebin.com/4LRauzgg。两者都应该工作,也许尝试将 URL 复制到您的浏览器中。谢谢!
猜你喜欢
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多