每次调用方法时,如何将1添加到另一个类的整数?

时间:2014-09-06 21:59:00

标签: java android

我有一个有一个名为counter的整数的类。我在主活动的文本视图中显示了这个整数。当planetClick方法发生时,我也想要发生一件事。我想要它,所以每次调用planetClick方法时它都会向计数器整数加1。我也希望计数器整数在每个对象中都是相同的值,我希望它在文本视图中显示为相同的值,所以我使用静态,这是我的意思吗?

我的班级

 public class Ship implements Serializable {

        private static int counter = 1;
        public int getCounter()
        {
            return counter;
        }
        public void setCounter(int c) {
            counter = c;
        }
}

以下主要活动

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

       TextView counterText = (TextView) findViewById(R.id.counter);

       counterText.setText(String.valueOf(new Ship().getCounter()));
    }
    public void planetClick(View view)
    {
      //I want to add 1 to the counter integer here
    }

---- ----编辑

@Sagar Pilkhwal

这是我在你的回答中使用的代码,我做错了什么?:

以下主要活动

 private Ship  mShip;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        mShip  = new Ship();
        TextView counterText = (TextView) findViewById(R.id.counter);

        counterText.setText(String.valueOf(mShip.getCounter()));
    }

    public void planetClick(View view)
    {
        int curCounter = mShip.getCounter();
        mShip.setCounter(curCounter + 1);

    }

5 个答案:

答案 0 :(得分:3)

private Ship mShip;
private TextView counterText;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    mShip = new Ship();
    counterText = (TextView) findViewById(R.id.counter);
    counterText.setText(String.valueOf(mShip.getCounter()));
}
public void planetClick(View view) {
    int curCounter = mShip.getCounter();
    mShip.setCounter(curCounter + 1);
    counterText.setText(String.valueOf(mShip.getCounter()));
}

答案 1 :(得分:2)

你可能也想让计数器的getter和setter也是静态的。这样,每次要增加Ship时,都不必创建Ship的新实例。

public static int getCounter() ...
public static void setCounter(int c) ...
...
// to update the counter from another class
Ship.setCounter(Ship.getCounter() + 1);

为了良好的面向对象实践,您可以Ship提供incrementCounter()方法而不是setCounter()方法。

我会说,如果你有一个真正的全局计数器,将它保留在使用它的类中是有意义的,那么你可以只有一个静态int,并用counter++递增它。 / p>

答案 2 :(得分:1)

planetClick方法中,添加以下内容:

Ship.setCounter(Ship.getCounter() + 1);

这将为counter添加1。此外,您不必将counter设为静态,因为它是私有的,并且未被Ship类中的任何静态方法引用,但您需要使getCounter和{{1为此工作的静态。

答案 3 :(得分:0)

你的getter和setter应该是静态的,因为它是一个静态字段。但是,由于它是一种原始类型,并且你的getter和setter不会处理任何特定的事情,我建议你公开你的计数器,这样你就可以很容易地访问它。

答案 4 :(得分:0)

制作counter变量public而不是private。将其声明更改为:

public static int counter = 1;

然后在planetClick()方法中添加以下行:

Ship.counter++;

每次调用counter时,这将使planetClick()变量增加1。