如何防止方法被调用两次?

时间:2014-05-26 09:50:32

标签: java android function

我想以编程方式检查函数是否被调用。如果之前调用过,那么不要允许和忽略第二次调用,如果没有则让按钮调用。为什么我需要这样做是因为我有一个longClick按钮来运行某些功能,如果用户忘记这样做,然而用户将点击另一个按钮,我将放置相同的功能。我需要防止两次运行相同的功能。

public class ActivityA extends Activity{

private static boolean isScreenShotTaken = false;

blankcard.setOnLongClickListener(new OnLongClickListener() {

       if(!isScreenShotTaken)
            {
                Bitmap bitmap = takeScreenshot();
                saveBitmap(bitmap);
                isScreenShotTaken = true;

            }

        return false;
        }
});



btnsend.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

Intent intent = new Intent(Templates.this, MailCard.class);
intent.putExtra("name", Name);

if(!isScreenShotTaken)
            {
                Bitmap bitmap = takeScreenshot();
                saveBitmap(bitmap);
                isScreenShotTaken = true;
            }

startActivity(intent);             

        }
    });


public Bitmap takeScreenshot() {

// code exist here
//if called once, second call ignore

}

public void saveBitmap(Bitmap bitmap) {

// code exist here
//if called once, second call ignore

  }
}

感谢您的建议。

4 个答案:

答案 0 :(得分:1)

我的版本:

我这样写:

// In the declaration section of your class.
private static boolean isScreenShotTaken = false;

// In the code.
btnsend.setOnClickListener
(
    new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if(!isScreenShotTaken)
            {
                Bitmap bitmap = takeScreenshot();
                saveBitmap(bitmap);
                isScreenShotTaken = true;
            }
        }
    }
);

blankcard.setOnLongClickListener
(
    new OnLongClickListener()
    {
        @Override
        public boolean onLongClick(View arg0)
        {
            if(!isScreenShotTaken)
            {
                Bitmap bitmap = takeScreenshot();
                saveBitmap(bitmap);
                isScreenShotTaken = true;
            }
        }
    }
);

答案 1 :(得分:0)

简单:

public Bitmap takeScreenshot() {
// before start
blankcard.setEnabled(false);
btnsend.setEnabled(false);

// do your sutff
... here ...

// at the end
blankcard.setEnabled(true);
btnsend.setEnabled(true);

}

如果你正在使用AsyncTask或类似的,请将这些调用放在preExecute和postExecute中

答案 2 :(得分:0)

为什么不使用全局标志变量? 像,

btnsend.setOnClickListener(new View.OnClickListener() {

    @Override
    if(flag == true)
  {
    public void onClick(View v) {
        // TODO Auto-generated method stub

//          Bitmap bitmap = takeScreenshot();
//          saveBitmap(bitmap);

            flag = 1;

    }
  }
});

因此,即使调用了setOnClickListener,它也不会执行代码。

答案 3 :(得分:0)

如果你有一个按钮

按下按钮后..在onclickListener

button.setclickable(false);

然后按下按钮。

如果你有一些方法。比拿一个gloabal布尔变量 boolean isFirstTime= false;

一旦你进入方法,就把它设置为true;

 isFirstTime= true;